जावा फ़ाइल कॉपी (बफर आकार बदलना)
जावा में जावा.आईओ.इनपुटस्ट्रीम、जावा.आईओ.आउटपुटस्ट्रीम पर
इस अनुभाग में एक नमूना प्रोग्राम प्रस्तुत किया गया है जो इनपुट/आउटपुट स्ट्रीम का उपयोग करके कॉपी ऑपरेशन करता है।
स्ट्रीम-आधारित कॉपीिंग में, रीड बफर का आकार बढ़ाने से बड़ी फाइलों की भी अपेक्षाकृत तेज़ कॉपीिंग संभव हो पाती है।
यह सैंपल प्रोग्राम आपको डेटा रीडिंग बफर का आकार एक आर्गुमेंट के रूप में निर्दिष्ट करने की अनुमति देता है।
निर्दिष्ट रीड बफर क्षेत्र जावा वीएम हीप के भीतर आवंटित किया जाता है, इसलिए इसे बहुत बड़ा करने से दक्षता कम हो जाएगी। इसलिए, फ़ाइलों की प्रतिलिपि बनाते समय, हम दक्षता के लिए इष्टतम डेटा रीड बफर आकार की भी जाँच करते हैं।
नमूना कार्यक्रम
/**
* इनपुट स्ट्रीम से आउटपुट स्ट्रीम में डेटा लिखा जाता है।
* कॉपी करने की प्रक्रिया पूरी होने के बाद, इनपुट और आउटपुट स्ट्रीम बंद कर दी जाएंगी।
* @param इनपुट स्ट्रीम में
* @param os आउटपुट स्ट्रीम
* @param bufferSize डेटा पढ़ने के लिए बफर का आकार (केबी)।
* @throws IOException यदि कोई इनपुट/आउटपुट अपवाद होता है
*/
पब्लिक स्टैटिक वॉइड कॉपीस्ट्रीम (इनपुटस्ट्रीम इन, आउटपुटस्ट्रीम ओएस,
int bufferSize) throws IOException {
int len = -1;
बाइट[] बी = नया बाइट[बफरसाइज़ * 1024];
कोशिश {
while ((len = in.read(b, 0, b.length)) != -1) {
ओएस.राइट(बी, 0, लेन);
}
ओएस.फ्लश();
} अंत में {
यदि (in != null) {
कोशिश {
इन.क्लोज();
कैच (आईओएक्सेप्शन ई)
e.printStackTrace();
}
}
यदि (ओएस != नल) {
कोशिश {
ओएस.क्लोज();
कैच (आईओएक्सेप्शन ई)
e.printStackTrace();
}
}
}
}
कार्यान्वयन
सैंपल प्रोग्राम फ़ाइलों को कॉपी करने के लिए, मैंने C ड्राइव के ठीक नीचे "100M.txt" नाम की 100MB की एक फ़ाइल तैयार की। सैंपल प्रोग्राम में, C:\100M.txt डेटा को 1000 केबी के बफर आकार में पढ़ा जाता है। C:\a.txt इसे [इस स्थान] पर कॉपी करें।
नमूने को निम्नलिखित वातावरण में चलाया गया।
ऑपरेटिंग सिस्टम: विंडोज एक्सपी
सीपीयू: एथलॉन 1.46GHz
मेमोरी: 1 जीबी
जेआरई: 1.6.4
◆उदाहरण
/** * निष्पादन उदाहरण * @param args */ public static void main(String[] args) { try { copyStream("C:\\100M.txt", "C:\\a.txt",1000); } catch (IOException e) { e.printStackTrace(); } }
बफर आकार बदलना
फ़ाइलों की प्रतिलिपि बनाते समय एक कुशल डेटा रीड बफर आकार निर्धारित करने के लिए, copyStream के तीसरे तर्क को इस प्रकार सेट किया जाना चाहिए:
1KB, 100KB, 1000KB और 10000KB की इकाइयों में समान कॉपी प्रक्रिया करने के परिणाम नीचे संक्षेप में दिए गए हैं।

हालांकि हम केवल उपरोक्त परिणामों के आधार पर निश्चित निष्कर्ष नहीं निकाल सकते, लेकिन यदि डेटा रीड बफर का आकार 1000KB की इकाइयों में निर्दिष्ट किया गया है,
परिणामों से पता चला कि कॉपी ऑपरेशन के दौरान हीप उपयोग और प्रोसेसिंग समय के मामले में सिस्टम कुशल था।
इसके अलावा, फ़ाइल का आकार बढ़ाने (लगभग 1 जीबी तक) पर भी समान परिणाम प्राप्त हुए।
इसके विपरीत, छोटी फाइलों (लगभग 1MB या उससे कम) की कॉपी करते समय, बफर का आकार बढ़ाना व्यर्थ है, इसलिए लगभग 100KB निर्दिष्ट करना सबसे अच्छा है।
बेहतर गति के लिए FileChannel का उपयोग करें।
जावा.आईओ.इनपुटस्ट्रीम、जावा.आईओ.आउटपुटस्ट्रीम
इनपुट/आउटपुट स्ट्रीम को समझने के लिए कॉपी करना महत्वपूर्ण है, लेकिन
J2SE1.4 में नया I/O पेश किया गया है। java.nio.channels.FileChannel#transferTo
इस विधि का उपयोग करके आप फाइलों को और भी अधिक कुशलता से कॉपी कर सकते हैं।
आगे मैं आपको दिखाऊंगा कि FileChannel का उपयोग करके फाइलों को आसानी से और तेजी से कैसे कॉपी किया जाए।
⇒ जावा फ़ाइल कॉपी करना (आसान और तेज़)

