2009-01-07 17 views
11

जैसा कि सबसे अधिक पता होना चाहिए close() किसी भी स्ट्रीम का उपयोग बंद करता है।जावा के फ़ाइल लॉक का उपयोग करते समय, क्या बंद() को स्वचालित रूप से लॉक करने के लिए बंद करना है। कृपया()?

यह अनुवर्ती कोड की अनुमति देता है:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...))); 
... 
br.close(); 

इस के बाद से हम FileInputStream के लिए एक संदर्भ की जरूरत नहीं है और इसे बंद करना याद है, अच्छा है।

लेकिन क्या यह FileLock एस के लिए भी काम करता है?

final FileInputStream fis = new FileInputStream(new File("buffer.txt")); 
final FileChannel c = fis.getChannel(); 
final FileLock lock = c.lock(0L, Long.MAX_VALUE, true); 
final BufferedReader br = new BufferedReader(new InputStreamReader(fis)); 

try { 
    while(br.ready()) { 
     System.out.println(br.readLine()); 
    } 
} finally { 
    br.close(); 
} 

मैं इस कोड की कोशिश की है और ताला सही ढंग से जारी किया गया है जब br.close() कहा जाता है, लेकिन है ऐसा करने के लिए सुरक्षित है? Closeable JavaDoc कहता है, "इस स्ट्रीम को बंद करता है और इसके साथ जुड़े किसी भी सिस्टम संसाधन को जारी करता है।" क्या मुझे लगता है कि मैं close() का उपयोग कर रहा हूं जैसा कि release() लॉक पर निर्दिष्ट है?

उत्तर

7
के अनुसार

JavaDoc:

यह मान्य रहती है जब तक ताला रिहाई विधि लागू द्वारा जारी है, चैनल को बंद करने कि या की समाप्ति से यह प्राप्त करने के लिए इस्तेमाल किया गया था, से जावा आभासी मशीन, जो भी पहले आता है।

और यहाँ FileInputStream.close()

public void close() throws IOException { 
    if (channel != null) 
     channel.close(); 
    close0(); 
} 

यह close धारा पर की तरह लग रहा की सामग्री हैं कि किस चैनल के अवरोध समाप्त बंद कर देता है।

1

हां।

ताले एक फ़ाइल वर्णनकर्ता पर निर्भर हैं। जब किसी प्रक्रिया में फ़ाइल का प्रतिनिधित्व करने वाला कोई फ़ाइल वर्णनकर्ता नहीं होता है, तो इसके साथ जुड़े लॉक नहीं होंगे।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^