Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ObjectOutputStream和ObjectInputStream_Java_Objectinputstream_Objectoutputstream_Bufferedinputstream - Fatal编程技术网

Java 使用ObjectOutputStream和ObjectInputStream

Java 使用ObjectOutputStream和ObjectInputStream,java,objectinputstream,objectoutputstream,bufferedinputstream,Java,Objectinputstream,Objectoutputstream,Bufferedinputstream,假设: ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(remote.getOutputStream())); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(remote.getInputStream())); 在发送“initiate file send”消息和大小并成功读取另一端的字符串

假设:

ObjectOutputStream out =
    new ObjectOutputStream(new BufferedOutputStream(remote.getOutputStream()));
ObjectInputStream in =
    new ObjectInputStream(new BufferedInputStream(remote.getInputStream()));
在发送“initiate file send”消息和大小并成功读取另一端的字符串和长数字(您可以假设我已经处理了它们)后,我希望能够编写整个文件,而不必执行新的OutputStream。 到目前为止,我所做的是:

InputStream buf = new BufferedInputStream(new FileInputStream(file));
out.writeUnshared(new PeerProtocol(PeerProtocol.Type.FILE, file.getName(), file.length()));
int sum = 0, len;
byte[] buffer = new byte[remote.getSendBufferSize()];
out.flush();
out.reset();
while ((len = buf.read(buffer)) > 0) {
    out.write(buffer, 0, len);
    sum += len;
    sendFileDialogController.updatePercentage((double) sum / file.length() * 100);
}
// System.out.println("done sending");
//out.flush(); didnt work neither
sendFileDialogController.updatePercentage(100);
buf.close();

问题是我总是缺少最后几个字节,所以文件已损坏,无法使用。如何解决此问题?

在关闭while循环之前,尝试在while循环之后刷新流。遗憾的是,这样做不起作用