InputStream读取

时间:2011-10-16 20:20:33

标签: java inputstream

我的时区晚安。

我正在构建一个http机器人,当我从服务器收到响应时,我想做两件事。首先是打印响应的主体,因为我知道响应的主体是TEXT类型/ HTML我做的第二件事是通过html解析器解析响应(在这个特定情况下NekoHtml)。 代码片段:

    //Print the first call
    printResponse(urlConnection.getInputStream());
    document = new InputSource(urlConnection.getInputStream());
    parser.setDocument(document);

问题是当我运行第一行(printResponse)时,第二行将抛出异常。 现在问题 - >这是因为InputStream只能被读取一次?每次我们从输入流中读取字节被清除? 我们怎样才能从输入流中读取更多内容?

提前致谢

祝你好运

3 个答案:

答案 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);