嘿我正在尝试使用java套接字发送文件,但是我遇到了InputStream类的read函数问题。我有这个代码
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()返回4096,然后是4(文件的其余部分),然后没有任何导致无限循环的文件。可能是什么问题?
我真的很感激你能提供的任何帮助,因为我已经被困在那里两个小时了。
答案 0 :(得分:3)
读取永远不会给出-1,因为它应该在缓冲区结束时
这不正确。当缓冲区结束时,它不应返回-1'。在 stream 结束之前它不会返回-1,直到对等体关闭连接才会发生。