نقل ملفات جافا عبر المقابس: إرسال واستقبال مصفوفات البايت
في Java، يتضمن نقل الملفات عبر المقابس تحويل الملف إلى مصفوفات بايت، إرسالها عبر المقبس، ثم تحويل البايتات مرة أخرى إلى ملف في الطرف المتلقي. تتناول هذه المقالة مشكلة واجهها مطور Java في تنفيذ وظيفة نقل الملفات هذه.
مشكلة من جانب الخادم
يظهر رمز الخادم لإنشاء ملف فارغ عند الاستلام البيانات من العميل. لحل هذه المشكلة، يجب على الخادم استخدام حلقة لقراءة البيانات المرسلة من قبل العميل في أجزاء، باستخدام مخزن مؤقت لتخزين البيانات مؤقتًا. بمجرد استلام كافة البيانات، يمكن للخادم كتابة الملف الكامل. رمز الخادم المصحح هو كما يلي:byte[] buffer = new byte[1024]; int بايت القراءة = 0؛ بينما ((bytesRead = in.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead);byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
مشكلة من جانب العميل يرسل كود العميل في البداية مصفوفة بايت فارغة إلى الخادم. لإرسال محتوى الملف الفعلي، يجب استخدام الكود التالي:
FileInputStream is = new FileInputStream(file); بايت[] بايت = بايت جديد[(int) طول]; is.read(بايت); out.write(bytes);
FileInputStream is = new FileInputStream(file);
byte[] bytes = new byte[(int) length];
is.read(bytes);
out.write(bytes);
مع التصحيحات المذكورة أعلاه، الكود الكامل للخادم والعميل هو كما يلي:
الخادم:... بايت[] المخزن المؤقت = بايت جديد[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 بايت القراءة = 0؛ بينما ((bytesRead = in.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos. Close(); ...
...
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();
...
... مقبس المقبس = مقبس جديد (مضيف، 4444)؛ DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); ملف الملف = ملف جديد("C:\\test.xml"); FileInputStream is = new FileInputStream(file); الطول الطويل = file. length(); إذا (الطول > عدد صحيح.MAX_VALUE) { System.out.println("الملف كبير جدًا."); } بايت[] بايت = بايت جديد[(int) طول]; is.read(بايت); out.write(بايت); ...
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3