2013-01-09 8 views
11

RandomAccessFile constructormode स्ट्रिंग स्वीकार करता है यह निर्दिष्ट करता है कि फ़ाइल को कैसे खोलना चाहिए।जावा: RandomAccessFile मोड "rws" बनाम "rwd"?

मैं "rws" और "rwd" मोड के बीच के अंतर के बारे में उलझन में हूं।

यहाँ क्या docs राज्य:

"rws" पढ़ने और लिखने के लिए खुला है, "rw" के साथ के रूप में, और भी की आवश्यकता है कि फ़ाइल की सामग्री या मेटाडाटा के लिए हर अद्यतन तुल्यकालिक लिखा जा अंतर्निहित स्टोरेज डिवाइस पर।

"RWD", पढ़ने और लिखने के लिए खुला "rw" के साथ के रूप में, और भी उस फ़ाइल की सामग्री के लिए हर अद्यतन अंतर्निहित संग्रहण उपकरण से तुल्यकालिक लिखा जा आवश्यकता होती है।

[...]

"RWD" मोड आई/ओ संचालन प्रदर्शन की संख्या को कम करने के लिए इस्तेमाल किया जा सकता। "Rwd" का उपयोग करने के लिए केवल पर संग्रहीत करने के लिए फ़ाइल की सामग्री के अपडेट की आवश्यकता होती है; "rws" का उपयोग करने के लिए फ़ाइल की सामग्री और उसके मेटाडेटा दोनों को अपडेट करने की आवश्यकता होती है, जिसे आम तौर पर कम से कम एक निम्न स्तर के I/O ऑपरेशन की आवश्यकता होती है।

... और metadata के बारे में कोई स्पष्टीकरण नहीं है। क्या इसका मतलब यह है कि "rws" फाइल सिस्टम पर अंतिम संशोधित टाइमस्टैम्प अपडेट करता है, और "rwd" नहीं करता है?

+0

@ T.J में फ़ाइल मेटाडाटा के बारे में कुछ जानकारी नहीं है। पाउडर अन्य ऐसे गुण क्या हैं? –

+0

@ क्रिस्टी: डुनो, मालिक और समूह के अधिकारों में परिवर्तन? बिट निष्पादित करें (\ * निक्स फाइल सिस्टम पर)। केवल पढ़ने के लिए बिट (एफएस पर यह है)। आदि ... –

+0

@ टीजे। पाउडर मुझे इस वर्ग 'एपीआई में कुछ भी स्पष्ट नहीं मिल रहा है जो उन विशेषताओं को बदल सकता है। –

उत्तर

13

क्या इसका मतलब यह है कि "rws" फाइल सिस्टम पर अंतिम संशोधित टाइमस्टैम्प अपडेट करता है, और "rwd" नहीं करता है?

rws फ़ाइल की सामग्री और फ़ाइल की संशोधन तिथि को फ़्लश करता है।

rwd फ़ाइल की सामग्री को फ्लश करता है, लेकिन फ़ाइल बंद होने तक संशोधन तिथि तब तक नहीं बदली जा सकती है।

आरडब्ल्यू केवल तभी फ़्लश करता है जब आप इसे बताते हैं और जब तक आप फ़ाइल को बंद नहीं करते हैं, तब तक संशोधित दिनांक नहीं बदलते हैं।

बीटीडब्ल्यू आरडब्ल्यूडब्ल्यू आरडब्ल्यू की तुलना में लिखने के लिए बहुत धीमी है, और आरयूएस फिर से धीमा है।

+0

ऐसा कुछ है जो मुझे नहीं मिलता है: जब आप किसी फ़ाइल की सामग्री को संशोधित करते हैं, तो किसी भी मामले में ctime संशोधित होता है (कम से कम यूनिक्स {-like} सिस्टम के साथ) ... मुझे यहां कुछ याद आना चाहिए। – fge

+0

@fge संकेतों को कम से कम परिभाषित करना चाहिए क्योंकि यह गारेंटी प्रदान करने के बारे में है। ओएस इस से अधिक करने के लिए स्वतंत्र है उदा। एक नई फाइल के लिए ctime सेट करें। –

+0

ctime "सामग्री संशोधन" समय है (mtime मेटाडेटा संशोधन है - प्रत्येक बार ctime अद्यतन किया जाता है, mtime भी अद्यतन किया जाता है क्योंकि सीटा मेटाडेटा का हिस्सा है) – fge

2

FileChannel एपीआई http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

...The file may also have some associated metadata such as access permissions, content type, and last-modification time... 

इसके अलावा, FileChannel.force(boolean metadata) एपीआई rws और RWD के बीच अंतर के बारे में अधिक जानकारी प्रदान करता है (हालांकि नाम का उल्लेख नहीं कर रहे हैं)

+0

दिलचस्प है, लेकिन मुझे जानकारी के लिए शिकार करना पड़ा। सही यूआरएल है: http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#force(boolean) –

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