2012-10-01 11 views
7

संभव डुप्लिकेट मिटा के बिना एक फ़ाइल में बाइट्स:
Best Way to Write Bytes in the Middle of a File in Javaलिखें मौजूदा बाइट्स

मैं एक फ़ाइल जिसमें मैं बाइट्स लिखने के लिए की जरूरत है।

मुझे पता है कि फ़ाइल में मुझे कौन सी स्थिति विशिष्ट बाइट्स डालने की आवश्यकता है। चीजों को स्पष्ट करने के लिए, मुझे किसी मौजूदा बाइट को मिटाने के बिना फ़ाइल के बीच में बाइट्स लिखना होगा। पूरे ऑपरेशन को फ़ाइल की लंबाई में वृद्धि करनी चाहिए।

ऐसा करने का सबसे अच्छा तरीका क्या है?

+0

http://stackoverflow.com/questions/181408/best-way-to-write-bytes-in-the-middle-of-a-file-in-java – gtgaxiola

+0

पहले से ही प्रयास किया गया है, दुर्भाग्य से मेरा कार्यान्वयन नहीं जोड़ा गया है बाइट्स लेकिन मौजूदा बाइट मिटाएं, वास्तव में डालने के लिए चाल क्या है? –

+0

@gtgaxiola: यह काम नहीं करेगा क्योंकि यह मौजूदा बाइट –

उत्तर

4

ऐसा करने का एकमात्र तरीका यह है कि वर्तमान में रास्ते में चलने वाले बाइट्स को चलाना है। इस पर निर्भर करते हुए कि आपको यह कितनी बार करना है, और फ़ाइल कितनी बड़ी है, अक्सर एक नई फ़ाइल बनाने, मौजूदा फ़ाइल की प्रतिलिपि बनाने और रास्ते में नए बाइट डालने का बेहतर विचार होता है।

आप बार बार फ़ाइल अद्यतन करने की आवश्यकता है, या यह छोटा सा है (हो सकता है 100 केबी तक) आप उपयोग कर सकते हैं एक RandomAccessFile:

  1. फ़ाइल का विस्तार, setLength() पद्धति का उपयोग करके, बाइट की संख्या जोड़कर आप length() विधि द्वारा जो कुछ भी लौटाया गया है उसे डालने वाला होगा।
  2. यदि आपके पास पर्याप्त मेमोरी है, तो byte[] बनाएं जो प्रविष्टि बिंदु से सभी बाइट्स को फ़ाइल के पिछले छोर तक रखेगा।
  3. कॉल seek() सम्मिलन बिंदु
  4. कॉल readFully() पर स्थित करने के लिए अपने अस्थायी सरणी
  5. कॉल seek() को भरने के लिए सम्मिलन बिंदु + बाइट की संख्या में स्थित करने के लिए उस पर अपने बफर लिखने के लिए सम्मिलित करने के लिए
  6. कॉल write() बिंदु
  7. कॉल seek() सम्मिलन बिंदु पर स्थिति बदलने के लिए
  8. कॉल `लिखने() नई बाइट्स
लिखने के लिए

यदि आप चरण # 2 में एक बड़ी-पर्याप्त सरणी नहीं बना सकते हैं, तो आपको एक छोटे बफर के साथ लूप में चरण 3-6 करना होगा। मैं कम से कम एक 64k बफर दक्षता के लिए उपयोग करेंगे।

+0

+1 बहुत अच्छी तरह से कवर किया गया। –

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