InputStream读取

tt0*_*686 0 java inputstream

在我的时区晚安.

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

    //Print the first call
    printResponse(urlConnection.getInputStream());
    document = new InputSource(urlConnection.getInputStream());
    parser.setDocument(document);
Run Code Online (Sandbox Code Playgroud)

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

提前致谢

最好的祝福

Tom*_*icz 5

除了Ted Hopp所说的,看看Apache Commons IO库.你会找到:

  • IOUtils.toString(urlConnection.getInputStream(), "UTF-8") 实用程序方法,它接受输入流,完全读取它并返回给定编码中的字符串

  • TeeInputStream是一个InputStream装饰器,它将复制每个读取字节并将其复制到给定的输出流中.

应该管用:

 InputStream is = new TeeInputStream(urlConnection.getInputStream(), System.out);
Run Code Online (Sandbox Code Playgroud)

  • 为TeeInputStream +1 - 如果你完全关心负载下的性能和/或扩展这个东西 - 无论它是什么 - 尽一切可能避免在内存中缓冲整个页面. (2认同)