[英]In java, how to read a fixed length from the inputstream and save as a file?
[英]Read from InputStream exact length
我正在用Java实现一个程序,该程序使用HTTP协议下载网页。 在向服务器发送GET
请求并读取响应头(包括content-length
)之后,程序将char
的数量(如content-length
指定的)读入char
数组。
我试过同时使用BufferedReader
和InputStreamReader
类。
如果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);
}
有关底层Reader
的ready()
方法的部分的含义是,它将阻塞直到至少一个字符被传输为止,但不会再次阻塞。 无法保证它将填充缓冲区。
你必须循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.