Rumah  >  Artikel  >  Java  >  Mengapa pemindahan fail saya melalui soket menghasilkan fail kosong?

Mengapa pemindahan fail saya melalui soket menghasilkan fail kosong?

Susan Sarandon
Susan Sarandonasal
2024-11-09 18:20:02911semak imbas

Why does my file transfer over sockets result in an empty file?

Transmisi Fail Melalui Soket: Menangani Isu Pertukaran Data

Dalam pengaturcaraan Java, menghantar dan menerima fail sebagai tatasusunan bait melalui soket boleh menghadapi cabaran. Panduan ini bertujuan untuk menyelesaikan isu yang dihadapi oleh pembangun yang melihat penciptaan fail kosong semasa proses pemindahan data antara klien dan pelayan.

Konfigurasi Pelayan

Tugas pelayan adalah untuk menerima data daripada pelanggan. Coretan kod berikut menggariskan kefungsian pelayan:

<code class="java">byte[] bytes = new byte[1024];

in.read(bytes);
System.out.println(bytes);

FileOutputStream fos = new FileOutputStream("C:\test2.xml");
fos.write(bytes);</code>

Isu timbul dalam baris fos.write(bait), di mana tatasusunan bait mengandungi data yang tidak lengkap. Ini kerana in.read(bait) hanya membaca sebahagian daripada data ke dalam tatasusunan.

Konfigurasi Pelanggan

Tugas pelanggan adalah menghantar data ke pelayan . Walau bagaimanapun, petikan kod berikut mengandungi tindakan yang tidak lengkap:

<code class="java">//out.write(bytes);
System.out.println(bytes);</code>

Barisan out.write(bait) diulas keluar, menghalang data dalam tatasusunan bait daripada ditulis ke pelayan. Akibatnya, pelayan menerima tatasusunan kosong, mengakibatkan penciptaan fail kosong.

Penyelesaian

Untuk menyelesaikan isu ini, cara yang betul untuk menyalin strim dalam Java adalah untuk menggunakan penimbal dan membaca data secara berterusan ke dalam penimbal sehingga tiada lagi data untuk dibaca. Serpihan kod berikut menggambarkan pendekatan ini:

<code class="java">byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0) {
  out.write(buffer, 0, count);
}</code>

Atas ialah kandungan terperinci Mengapa pemindahan fail saya melalui soket menghasilkan fail kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn