读取FileInputStream时出现奇怪的循环

时间:2017-03-02 19:26:04

标签: java sockets loops java-stream

在调试一些代码时,我注意到我的while循环没有完成。它只是卡住了?

解决问题的唯一方法是将System.out.println(fis.read(buffer));添加到循环中。

这是循环

        while(fis.read(buffer) > 0) {
        System.out.println(fis.read(buffer));
        dos.write(buffer);
        }

有关为何发生这种情况的任何想法? 我是否需要在循环中调用fis.read?

1 个答案:

答案 0 :(得分:2)

这是你需要做的:

while (fis.read(buffer) != -1) {
    System.out.println(buffer);
    dos.write(buffer);
}

您正在多次调用read方法,并且根据javadoc,它会阻塞,直到某些输入可用(这就是程序挂起的原因)。这就是javadoc所说的:

  

将此输入流中的b.length个字节数据读入   字节数组。此方法将阻止,直到某些输入可用。