gpt4 book ai didi

java - DataOutputStream 不发送 -1

转载 作者:行者123 更新时间:2023-12-02 07:20:35 27 4
gpt4 key购买 nike

我正在尝试为聊天客户端创建发送选项,并且我能够对小文件执行此操作,但当我尝试对大文件执行此操作时遇到问题。我尝试解决这个问题的方法是:客户端,从文件中读取并发送:

while ((buf = bin.read(bytearray, 0, bytearray.length)) != -1) {
os.write(bytearray,0,bytearray.length);
}
bin.close();

“bin”是我的 fileInputStream 中的 bufferedInputStream,“buf”只是一个整数,os 是我的 DataOutputStream。服务器端,接收和发送:

while ((buf = in.read(bytes, 0, bytes.length)) != -1) {
dos.write(bytes,0,bytes.length);
}

“in”是DataInputStream,“buf”是一个整数,“dos”是一个DataOutputStream(它为所有客户端执行此操作)客户端,从服务器接收文件并写入硬盘:

int buf;
while ((buf = in.read(bytes, 0, bytes.length)) != -1) {
fos.write(bytes,0,bytes.length);
}
fos.close();

这里“in”是一个DataInputStream,“fos”是一个FileOutputStream。发生的情况是,当我点击第一个客户端上的发送按钮时,服务器和客户端都开始接收文件,但只有当我关闭第二个客户端(接收器)时才会收到文件,因为那是套接字关闭的时间,可能就是它的时间实际上决定停止接收并完成写入文件。请告诉我为什么当发送执行一次时它没有收到“-1”并且服务器中的dataInputStream应该为空并因此导致“-1”?

最佳答案

DataOutputStream 从不发送-1。当您关闭输出流时,底层传输会向对等方发出 EOS 信号,遇到该信号时,read() API 将返回 -1。线路上没有-1。如果不关闭输出流,您将不会收到 -1。

如果您希望阅读器在不关闭输出流的情况下停止阅读,您必须以某种方式告诉它作为应用程序协议(protocol)的一部分:例如,在数据之前发送一个长度字,并让阅读器准确地阅读该内容很多字节。

关于java - DataOutputStream 不发送 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com