के लिए यूनिक्स स्टेट()/lstat() मान लीजिए कि मैं lstat() सिस्टम कॉल द्वारा लौटाए गए फ़ाइल की कई संपत्तियों (मालिक, आकार, अनुमतियां, समय) प्राप्त करना चाहता हूं। जावा में ऐसा करने का एक तरीका है java.io.File ऑब्जेक्ट बनाना और लंबाई(), lastModified() इत्यादि जैसे कॉल करें।जावा
इन कॉल में से हर एक एक स्टेट() कॉल से चलाता है, और मेरे प्रयोजनों के स्टेट के लिए() रों महंगा माना जाता है:: मैं पर समानांतर में फ़ाइलों के अरबों स्कैन करने के लिए कोशिश कर रहा हूँ मैं दोनों समस्याओं अब तक है सैकड़ों मेजबान, और (पहली अनुमान के लिए) इन फ़ाइलों तक पहुंचने का एकमात्र तरीका एनएफएस के माध्यम से होता है, अक्सर फाइलर क्लस्टर के खिलाफ जहां स्टेट() लोड के तहत आधे सेकेंड लग सकते हैं।
कॉल lstat() नहीं है, यह आमतौर पर stat() (जो symlinks का पालन करता है) या fstat64() (जो फ़ाइल खोलता है और पहुंच समय रिकॉर्ड करने के लिए एक लेखन ऑपरेशन ट्रिगर कर सकता है)।
वहाँ एक "सही" तरीका यह है है, ऐसा है कि मैं अंत में बस() कॉल एक भी lstat कर रहे हैं और struct स्टेट के सदस्यों तक पहुँचने? क्या मैं Googling से अब तक पाया है:
JDK 7 सब कुछ मैं चाहता हूँ के साथ java.nio.file में PosixFileAttributes इंटरफेस होगा (लेकिन मैं नहीं बल्कि हर रात को नहीं चल होगी मेरी JDK के बनाता है अगर मैं कर सकते हैं इससे बचो)।
मैं जेएनआई या जेएनए के साथ अपना स्वयं का इंटरफ़ेस रोल कर सकता हूं (लेकिन अगर मैं कोई मौजूदा नहीं हूं तो मैं नहीं चाहता हूं)।
ए previous similar question ने जेएनआई/जेएनए कार्यान्वयन के कुछ सुझाव दिए। एक चला गया है और दूसरा संदिग्ध रूप से बनाए रखा गया है (उदाहरण के लिए, कोई डाउनलोड नहीं, केवल एक एचजी भंडार)।
क्या वहां कोई बेहतर विकल्प हैं?
धन्यवाद! आखिरकार मुझे लगता है कि जेडीके 7 इतना बुरा नहीं है; मैं केवल उस टूल के साथ द्विआधारी रख सकता हूं जो मैं लिख रहा हूं, और यह जल्द ही उत्पादन-ग्रेड सॉफ्टवेयर होगा। –