數據,我有以下的代碼,我使用的文件發送到客戶端:Java的插座 - 重複去年寫
private void sendFile(Socket client) throws Exception {
byte[] data = new byte[4096];
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
FileInputStream fis = new FileInputStream("test.txt");
while (fis.read(data, 0, data.length) != -1) {
dos.write(data);
}
fis.close();
dos.close();
}
說我的發現是,文件大小後不同的問題轉讓。經過進一步調查,我發現文件在最後的dos.write(data)
上被複制。
例子:
原始文件:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Cras dictum diam neque, eu dictum sem efficitur ut.
Ut eu hendrerit risus.
In dapibus vel lectus at egestas.
傳輸的文件:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Cras dictum diam neque, eu dictum sem efficitur ut.
Ut eu hendrerit risus.
In dapibus vel lectus at egestas.
Ut eu hendrerit risus.
In dapib
我在這裏束手無策,我已經看了上百個例子試圖解決這個問題。我試過dos.flush()
,將讀取更改爲dos.read(data)
,並更改了while
循環條件。我期望傳輸非常大的文件,所以我不想一次加載一個文件。
編輯:
我一直使用命令行兩種telnet
和netcat
測試下載。
您需要檢查r來自讀取和寫入的eturn值。讀取的值告訴您讀了多少,並且可以安全地寫入。來自寫入的值告訴您寫了多少內容,並可能提示重試。 –