首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataOutputStream不发送-1

DataOutputStream不发送-1
EN

Stack Overflow用户
提问于 2013-01-12 21:02:08
回答 1查看 731关注 0票数 0

我正在尝试为聊天客户端提供一个发送选项,并且我能够对小文件进行发送,但是当我尝试使用大文件时,我遇到了一个问题。我试图解决的方法是:客户端,从文件中读取并发送:

代码语言:javascript
复制
while ((buf = bin.read(bytearray, 0, bytearray.length)) != -1) {
     os.write(bytearray,0,bytearray.length);
}
bin.close();

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

代码语言:javascript
复制
while ((buf = in.read(bytes, 0, bytes.length)) != -1) {
dos.write(bytes,0,bytes.length);
}

"in“是DataInputStream,"buf”是整数,"dos“是DataOutputStream(用于所有客户端)客户端,从服务器接收文件并写入硬盘驱动器:

代码语言:javascript
复制
int buf;
while ((buf = in.read(bytes, 0, bytes.length)) != -1) {
     fos.write(bytes,0,bytes.length);
}
fos.close();

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

EN

回答 1

Stack Overflow用户

发布于 2013-01-13 03:38:00

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

如果希望读取器停止读取而不关闭输出流,则必须以某种方式告诉它,作为应用程序协议的一部分:例如,在数据之前发送一个长度字,并让读取器读取准确的字节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14297923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档