InputStream 读取不 return -1
InputStream read doesnt return -1
嘿,我正在尝试使用 java 套接字发送文件,但我在使用 InputStream class 的读取功能时遇到问题。我有这个代码
InputStream is = sock.getInputStream();
fos = new FileOutputStream(FILE_TO_RECEIVED);
bos = new BufferedOutputStream(fos);
byte [] buffer = new byte[4096];
int bytesRead;
int totalLength = 0;
while(-1 != (bytesRead = is.read(buffer))) {
bos.write(buffer, 0, bytesRead);
totalLength += bytesRead;
}
bos.close();
fos.close();
is.close();
但它停在了最后。我用 System.err.println 和调试检查了这个,似乎 is.read 从来没有像缓冲区结束时那样给出 -1 。
因此,例如我有一个 5000 字节的文件,首先是 read() returns 4096,然后是 4(文件的其余部分),然后没有任何内容会导致无限循环。可能是什么问题?
非常感谢您提供的任何帮助,因为我已经被困在那里差不多两个小时了。
read never gives -1 as it should when the buffer ends
这是不正确的。它不应该 return -1 'when the buffer ends'。它只会在 流 结束时 return -1,直到对等方关闭连接才会发生。
嘿,我正在尝试使用 java 套接字发送文件,但我在使用 InputStream class 的读取功能时遇到问题。我有这个代码
InputStream is = sock.getInputStream();
fos = new FileOutputStream(FILE_TO_RECEIVED);
bos = new BufferedOutputStream(fos);
byte [] buffer = new byte[4096];
int bytesRead;
int totalLength = 0;
while(-1 != (bytesRead = is.read(buffer))) {
bos.write(buffer, 0, bytesRead);
totalLength += bytesRead;
}
bos.close();
fos.close();
is.close();
但它停在了最后。我用 System.err.println 和调试检查了这个,似乎 is.read 从来没有像缓冲区结束时那样给出 -1 。 因此,例如我有一个 5000 字节的文件,首先是 read() returns 4096,然后是 4(文件的其余部分),然后没有任何内容会导致无限循环。可能是什么问题?
非常感谢您提供的任何帮助,因为我已经被困在那里差不多两个小时了。
read never gives -1 as it should when the buffer ends
这是不正确的。它不应该 return -1 'when the buffer ends'。它只会在 流 结束时 return -1,直到对等方关闭连接才会发生。