2 回答

TA貢獻1921條經驗 獲得超9個贊
文件是可序列化的,所以我建議您應該嘗試直接通過 ObjectOutputStream / ObjectInputStream 發送它。
例如在服務器端:
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
...
out.writeObject(yourFileObject);
在客戶端:
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
...
File receivedFile = null;
try {
receivedFile = (File) in.readObject();
}
catch (IOException e) {
...
}

TA貢獻1873條經驗 獲得超9個贊
我不完全確定為什么會發生這種情況,但您不應該使用DataInputStream
which “讓應用程序讀取原始 Java 數據類型”,而InputStreamReader
which “是從字節流到字符流的橋梁”。
此外,您可以將該閱讀器包裝成一個BufferedReader讓您逐行閱讀的內容,您最終會得到類似
try (BufferedReader reader=new BufferedReader(new InputStreamReader(inStream, UTF8));
? ? ?PrintWriter writer = new PrintWriter(file)) {
? ? reader.lines().forEach(writer::println);
}
上傳,或
try (PrintWriter writer = new PrintWriter(outStream)) {
? ? Files.lines().forEach(writer::println);
}
下載。
添加回答
舉報