繁体   English   中英

以多种格式从InputStream读取

[英]Read from InputStream in multiple formats

我正在尝试编写一个读取HTTP请求和响应并解析它们的类。 由于标题是普通文本,因此使用BufferedReaderreadLine方法读取它们似乎最容易。 这显然不会对数据体造成影响,因为它可能是二进制的,所以我想在读取头文件后切换到读取原始字节。

现在,我正在做这样的事情:

InputStream input=socket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
BufferedInputStream binstream=new BufferedInputStream(input);

问题是BufferedReader正在提前读取并吞噬流中的所有二进制数据,然后才有机会通过binstream获取它。

有没有办法阻止它在每次调用readLine时超出换行符读取? 或者是否有更好的方法来读取原始二进制数据后的单行ASCII文本?

Java中已经有一个用于处理HTTP请求和响应的类。 您应该使用它而不是尝试自己解析响应。 解析HTTP响应比您想象的更困难,因为您必须处理不同的编码方法。 它不是响应有效负载中的原始二进制数据。 HttpURLConnection类将为您解析标头,并为有效负载提供InputStream。

http://download.oracle.com/javase/1.4.2/docs/api/java/net/HttpURLConnection.html

如果您不想使用像Konstantin建议的现成HTTP客户端/服务器实现,DataInputStream具有readLine方法。 它已被弃用,因为它没有进行正确的转换(主要是直接字节 - > char转换),但我认为对于纯ASCII标题行,你应该是好的。

(您应该在DataInputStream下放置一个BufferedInputStream,因为readLine会单独读取每个字节。)

commons-httpclient可能会为您节省大量工作。

暂无
暂无

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

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