【发布时间】:2011-06-27 06:57:39
【问题描述】:
我正在尝试编写一个读取 HTTP 请求和响应并解析它们的类。 由于标题是普通文本,使用 BufferedReader 和 readLine 方法似乎最容易阅读它们。这显然不适用于数据体,因为它可能是二进制的,所以我想在读取标头后切换到读取原始字节。
现在,我正在做这样的事情:
InputStream input=socket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
BufferedInputStream binstream=new BufferedInputStream(input);
问题在于 BufferedReader 正在提前读取并在我有机会使用 binstream 获取它之前从流中获取所有二进制数据。
有没有办法防止它在每次调用 readLine 时读取超出换行符的内容? 或者有没有更好的方法来读取单行 ASCII 文本和原始二进制数据?
【问题讨论】:
-
根据 Oracle 的文档,readLine 不应超出换行符:download.oracle.com/javase/6/docs/api/java/io/…
-
@Argote: BufferedReader 本身只返回一行,但由于它是缓冲的,它在搜索换行符之前首先填充自己的缓冲区 - 因此,数据已经从底层流。
-
@Paŭlo Ebermann 啊,我明白了。
标签: java http inputstream bufferedreader