我的时区晚安。
我正在构建一个http机器人,当我从服务器收到响应时,我想做两件事。首先是打印响应的主体,因为我知道响应的主体是TEXT类型/ HTML我做的第二件事是通过html解析器解析响应(在这个特定情况下NekoHtml)。 代码片段:
//Print the first call
printResponse(urlConnection.getInputStream());
document = new InputSource(urlConnection.getInputStream());
parser.setDocument(document);
问题是当我运行第一行(printResponse)时,第二行将抛出异常。 现在问题 - >这是因为InputStream只能被读取一次?每次我们从输入流中读取字节被清除? 我们怎样才能从输入流中读取更多内容?
提前致谢
祝你好运
答案 0 :(得分:5)
除了 Ted Hopp 之外,还要看看Apache Commons IO库。你会发现:
IOUtils.toString(urlConnection.getInputStream(), "UTF-8")
实用程序方法,它接受输入流,完全读取并返回给定编码的字符串
TeeInputStream
是一个InputStream
装饰器,它将复制每个读取字节并将其复制到给定的输出流中。
应该工作:
InputStream is = new TeeInputStream(urlConnection.getInputStream(), System.out);
答案 1 :(得分:0)
将服务器的响应读入字节数组。然后,您可以创建ByteArrayInputStream以重复读取字节。
答案 2 :(得分:0)
正如Ted Hopp所说:
byte [] bytes = new byte[urlConnection.getInputStream().available()];
printResponse(new ByteArrayInputStream(bytes));
document = new InputSource(new ByteArrayInputStream(bytes));
parser.setDocument(document);