1
我正在用java文件傳輸線程客戶端無法識別的文件流的末尾
這裏是服務器的代碼
(fileWriter = new BufferedOutputStream(fileTransferSocket.getOutputStream()))
try {
BufferedInputStream fileReader = new BufferedInputStream(new FileInputStream(CLIENT_PATH + "/" + filename));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.flush();
fileReader.close();
System.out.println(filename + " send complete");
}
而且客戶端的代碼
(fileReader = new BufferedInputStream(fileTransferSocket.getInputStream()))
try {
BufferedOutputStream fileWriter = new BufferedOutputStream(new FileOutputStream(new File(PROGRAM_PATH + "/" + filename)));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
System.out.println(filename + " receive complete.");
fileWriter.close();
}
服務器打印
System.out.println(filename + " send complete");
它表示服務器發送文件的每個字節。
但是,客戶端不能打印
System.out.println(filename + " receive complete.");
我檢查了多少次,而循環運行(經過兩個,服務器和客戶端)
兩個while循環運行685倍
我想客戶端的while循環無法識別文件傳輸的結束。
任何人都知道問題?
它沒有工作......我無法逃避while循環。 – 2014-10-28 01:40:16
這是不對的。發送-1只是發送字節值「0xFF」。 -1通過輸入流'read'方法特別返回,它不是流本身的一部分。 – Radiodef 2014-10-28 01:55:29
似乎在基本輸入或輸出流中的字節是從0-255,所以在數據轉換級別,你不能告訴客戶端是結束。否則你關閉套接字或使用應用程序邏輯數據替換結束,不僅-1在客戶端。它可能是一些特殊字符。 – 2014-10-28 02:01:19