Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Memindahkan Fail ke Soket dengan Betul di Java?

Susan Sarandon
Lepaskan: 2024-11-03 13:59:31
asal
288 orang telah melayarinya

How to Correctly Transfer Files Over Sockets in Java?

Pemindahan Fail Java melalui Soket: Menghantar dan Menerima Tatasusunan Byte

Di Java, memindahkan fail melalui soket melibatkan penukaran fail kepada tatasusunan bait, menghantarnya melalui soket, dan kemudian menukar bait kembali menjadi fail di hujung penerima. Artikel ini menangani isu yang dihadapi oleh pembangun Java dalam melaksanakan fungsi pemindahan fail ini.

Isu Sebelah Pelayan

Kod pelayan kelihatan seperti mencipta fail kosong apabila menerima data daripada klien. Untuk menyelesaikan masalah ini, pelayan harus menggunakan gelung untuk membaca data yang dihantar oleh klien dalam ketulan, menggunakan penimbal untuk menyimpan data buat sementara waktu. Setelah semua data telah diterima, pelayan boleh menulis fail lengkap. Kod pelayan yang diperbetulkan adalah seperti berikut:

<code class="java">byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
    fos.write(buffer, 0, bytesRead);
}</code>
Salin selepas log masuk

Isu Sampingan Pelanggan

Kod klien pada mulanya menghantar tatasusunan bait kosong ke pelayan. Untuk menghantar kandungan fail sebenar, kod berikut hendaklah digunakan:

<code class="java">FileInputStream is = new FileInputStream(file);
byte[] bytes = new byte[(int) length];
is.read(bytes);
out.write(bytes);</code>
Salin selepas log masuk

Kod Yang Diperbaiki

Dengan pembetulan yang dinyatakan di atas, kod penuh untuk pelayan dan klien ialah seperti berikut:

Pelayan:

<code class="java">...
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();
...</code>
Salin selepas log masuk

Pelanggan:

<code class="java">...
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);
...</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Fail ke Soket dengan Betul di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan