繁体   English   中英

从InputStream读取的确切长度

[英]Read from InputStream exact length

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

我试过同时使用BufferedReaderInputStreamReader类。

问题

如果content-length足够高,则仅读取流的一部分,而其余字节不会被触及(例如我的一端已读取所有可用字节,而另一端尚未完成写入)。

原因

BufferedReader类的文档中所述:

重复进行此迭代read直到满足以下条件之一为止:*

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

  • 恐怕第3号项目符号会导致read在中间退出,尽管指定的字节数尚未读取。

    我可以自己实现此功能,但我想知道是否有任何类会忽略3号项目符号并阻塞,直到读取完所有字节,我找不到一个。

    try (BufferedReader buffer = new BufferedReader(new InputStreamReader(stream))) {
        char[] arr = new char[contentLength];
        buffer.read(arr, 0, contentLength);
        text.append(arr);
    }
    

    有关底层Readerready()方法的部分的含义是,它将阻塞直到至少一个字符被传输为止,但不会再次阻塞。 无法保证它将填充缓冲区。

    你必须循环。

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM