从InputStream读取确切的长度

时间:2016-02-06 00:22:46

标签: java inputstream bufferedreader

我正在用Java实现一个使用HTTP协议下载网页的程序。 在向服务器发送GET请求并读取响应头(包括content-length)之后,程序将char数组读入chars的数量(如{{1}中所指定的}})。

我尝试过使用BufferedReaderInputStreamReader类。

问题

如果content-length足够高,则只读取部分流并且不触及其余字节(就像我的结束已读取所有可用字节而另一端未完成写入)。

原因

content-length类的文档中所述:

  

此迭代BufferedReader将继续,直到满足以下条件之一:        *

  • 已读取指定数量的字符
  • 基础流的read方法返回        * read,表示文件结束,或        *        *
  • 基础流的-1方法        *返回ready,表示进一步的输入请求        *会阻止。

  • 我担心3号子弹导致false在中间退出,尽管指定的字节数尚未读取。

    我自己可以实现这个功能,但是我想知道是否有任何类忽略子弹3号并阻塞直到所有字节都被读取,我找不到。

    read

    1 个答案:

    答案 0 :(得分:0)

    关于基础ready()的{​​{1}}方法的部分的含义是它将阻塞,直到至少一个字符已被传输,但不会再次阻塞。无法保证它会填满缓冲区。

    你必须循环。