我正在尝试为聊天客户端提供一个发送选项,并且我能够对小文件进行发送,但是当我尝试使用大文件时,我遇到了一个问题。我试图解决的方法是:客户端,从文件中读取并发送:
while ((buf = bin.read(bytearray, 0, bytearray.length)) != -1) {
os.write(bytearray,0,bytearray.length);
}
bin.close();"bin“是来自fileInputStream的fileInputStream,"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。当我按下第一个客户端上的“发送”按钮时,服务器和客户端都开始接收文件,但是只有当我关闭第二个客户端(接收方)时才会收到它,因为套接字是在这个时候关闭的,而且很可能是它决定停止接收并完成文件写入的时候。如果发送只执行一次,并且服务器中的dataInputStream应该是空的,那么请告诉我为什么它没有收到"-1“,从而导致了"-1"?
发布于 2013-01-13 03:38:00
DataOutputStream从不发送-1.当关闭输出流时,底层传输向对等方发送EOS信号,当遇到read() API作为-1返回EOS。电线上没有一号。如果不关闭输出流,则不会收到-1。
如果希望读取器停止读取而不关闭输出流,则必须以某种方式告诉它,作为应用程序协议的一部分:例如,在数据之前发送一个长度字,并让读取器读取准确的字节。
https://stackoverflow.com/questions/14297923
复制相似问题