जावा फ़ाइल कॉपी (बफ़र आकार बदलें)
जावा में java.io.इनपुटस्ट्रीम,java.io.आउटपुटस्ट्रीम पर
एक नमूना प्रोग्राम प्रस्तुत करना जो इनपुट/आउटपुट स्ट्रीम का उपयोग करके कॉपी प्रोसेसिंग करता है।
स्ट्रीम का उपयोग करके कॉपी प्रोसेसिंग में, रीड बफर आकार को बढ़ाकर बड़ी फ़ाइलों को भी अपेक्षाकृत तेज़ी से कॉपी किया जा सकता है।
नमूना कार्यक्रम में, डेटा रीड बफर आकार को एक तर्क के साथ निर्दिष्ट किया जा सकता है।
निर्दिष्ट रीड बफ़र क्षेत्र JavaVM हीप के भीतर सुरक्षित है, इसलिए इसे बहुत बड़ा बनाने से खराब दक्षता होगी। इसलिए, हम फ़ाइलों की प्रतिलिपि बनाते समय कुशल डेटा रीड बफ़र आकार की भी जाँच करते हैं।
नमूना कार्यक्रम
/**
* इनपुट स्ट्रीम से आउटपुट स्ट्रीम में डेटा लिखता है।
*कॉपी प्रक्रिया पूरी होने के बाद इनपुट/आउटपुट स्ट्रीम बंद हो जाएगी।
* @param इनपुट स्ट्रीम में
* @परम ओएस आउटपुट स्ट्रीम
* @param बफ़रसाइज़ डेटा रीड बफ़र साइज़ (KB)।
* @यदि कुछ इनपुट/आउटपुट प्रोसेसिंग अपवाद होता है तो IOException को फेंकता है
*/
सार्वजनिक स्थैतिक शून्य कॉपीस्ट्रीम (इनपुटस्ट्रीम इन, आउटपुटस्ट्रीम ओएस,
int बफ़रसाइज़) IOException फेंकता है {
इंट लेन = -1;
बाइट[] बी = नया बाइट[बफ़रसाइज़ * 1024];
कोशिश {
जबकि ((len = in.read(b, 0, b.length)) != -1) {
ओएस.राइट(बी, 0, लेन);
}
ओएस.फ्लश();
} अंत में {
यदि (में != शून्य) {
कोशिश {
in.close();
} पकड़ें (IOException e) {
ई.प्रिंटस्टैकट्रेस();
}
}
यदि (ओएस! = शून्य) {
कोशिश {
ओएस.बंद करें();
} पकड़ें (IOException e) {
ई.प्रिंटस्टैकट्रेस();
}
}
}
}
कार्यान्वयन
नमूना प्रोग्राम फ़ाइल की प्रतिलिपि बनाने के लिए, हमने सीधे C ड्राइव के अंतर्गत एक 100MB फ़ाइल "100M.txt" तैयार की है। नमूना कार्यक्रम में, C:\100M.txt , बफ़र आकार 1000KB की इकाइयों में डेटा पढ़ें। सी:\a.txt में कॉपी।
नमूना निम्नलिखित वातावरण में निष्पादित किया गया था।
ओएस: विंडोज़एक्सपी
सीपीयू: एथलॉन 1.46GHz
मेमोरी: 1 जीबी
जेआरई: 1.6.4
◆निष्पादन उदाहरण
/** * निष्पादन उदाहरण * @param args */ सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) { प्रयास करें {copyStream ("C:\\100M.txt", "C:\\a.txt",1000); } पकड़ें (IOException e) { e.printStackTrace(); } }
बफ़र आकार बदलना
फ़ाइलों की प्रतिलिपि बनाते समय कुशल डेटा रीड बफ़र आकार की जाँच करने के लिए, कॉपीस्ट्रीम के तीसरे तर्क का उपयोग करें
1KB, 100KB, 1000KB और 10000KB इकाइयों में समान प्रतिलिपि प्रसंस्करण के परिणाम नीचे संक्षेप में दिए गए हैं।
हालाँकि यह केवल उपरोक्त परिणामों से निष्कर्ष नहीं निकाला जा सकता है, यदि आप 1000KB की इकाइयों में डेटा रीड बफर आकार निर्दिष्ट करते हैं,
परिणामों से पता चला कि यह कॉपी प्रोसेसिंग के दौरान ढेर के उपयोग और प्रसंस्करण समय के मामले में कुशल था।
फ़ाइल का आकार (लगभग 1GB) बढ़ाने पर भी समान परिणाम प्राप्त हुए।
दूसरी ओर, एक छोटी फ़ाइल (लगभग 1 एमबी या उससे कम) की प्रतिलिपि बनाते समय, बफर आकार बढ़ाना बेकार होगा, इसलिए मुझे लगता है कि लगभग 100 केबी निर्दिष्ट करना बेहतर है।
तेज़ गति के लिए FileChannel का उपयोग करें
java.io.इनपुटस्ट्रीम,java.io.आउटपुटस्ट्रीम
इनपुट/आउटपुट स्ट्रीम को समझने के लिए कॉपी प्रोसेसिंग महत्वपूर्ण है, लेकिन
J2SE1.4 में नया I/O पेश किया गया java.nio.channels.FileChannel#transferTo
इस पद्धति का उपयोग करके, आप फ़ाइलों को और भी अधिक कुशलता से कॉपी कर सकते हैं।
आगे, मैं आपको दिखाऊंगा कि FileChannel का उपयोग करके फ़ाइलों को आसानी से और तेज़ी से कैसे कॉपी किया जाए।
⇒ जावा फ़ाइल कॉपी (आसान और तेज़)