सॉकेट पर जावा फ़ाइल स्थानांतरण: बाइट सरणी भेजना और प्राप्त करना
जावा में, सॉकेट पर फ़ाइलों को स्थानांतरित करने में फ़ाइल को बाइट सरणी में परिवर्तित करना शामिल है, उन्हें सॉकेट के माध्यम से भेजना, और फिर बाइट्स को प्राप्त अंत में एक फ़ाइल में परिवर्तित करना। यह आलेख इस फ़ाइल स्थानांतरण कार्यक्षमता को लागू करने में जावा डेवलपर द्वारा सामना की गई समस्या को संबोधित करता है।
सर्वर-साइड समस्या
प्राप्त करने पर सर्वर कोड एक खाली फ़ाइल बनाता प्रतीत होता है क्लाइंट से डेटा. इसे हल करने के लिए, सर्वर को क्लाइंट द्वारा भेजे गए डेटा को टुकड़ों में पढ़ने के लिए एक लूप का उपयोग करना चाहिए, डेटा को अस्थायी रूप से संग्रहीत करने के लिए एक बफर का उपयोग करना चाहिए। एक बार सारा डेटा प्राप्त हो जाने पर, सर्वर पूरी फ़ाइल लिख सकता है। सही किया गया सर्वर कोड इस प्रकार है:
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
क्लाइंट-साइड इश्यू
क्लाइंट कोड प्रारंभ में सर्वर पर एक खाली बाइट सरणी भेजता है। वास्तविक फ़ाइल सामग्री भेजने के लिए, निम्नलिखित कोड का उपयोग किया जाना चाहिए:
FileInputStream is = new FileInputStream(file);
byte[] bytes = new byte[(int) length];
is.read(bytes);
out.write(bytes);
बेहतर कोड
उपरोक्त सुधारों के साथ, सर्वर और क्लाइंट के लिए पूरा कोड इस प्रकार है:
सर्वर:
...
byte[] buffer = new byte[1024];
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
FileOutputStream fos = new FileOutputStream("C:\\test2.xml");
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
fos.close();
...
ग्राहक:
...
Socket socket = new Socket(host, 4444);
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
File file = new File("C:\\test.xml");
FileInputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
System.out.println("File is too large.");
}
byte[] bytes = new byte[(int) length];
is.read(bytes);
out.write(bytes);
...
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3