2 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
文件是可序列化的,所以我建議您應(yīng)該嘗試直接通過 ObjectOutputStream / ObjectInputStream 發(fā)送它。
例如在服務(wù)器端:
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貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
我不完全確定為什么會(huì)發(fā)生這種情況,但您不應(yīng)該使用DataInputStream
which “讓應(yīng)用程序讀取原始 Java 數(shù)據(jù)類型”,而InputStreamReader
which “是從字節(jié)流到字符流的橋梁”。
此外,您可以將該閱讀器包裝成一個(gè)BufferedReader讓您逐行閱讀的內(nèi)容,您最終會(huì)得到類似
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);
}
下載。
添加回答
舉報(bào)