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!