我通过HttpURLConnection
向服务器发出一个http获取请求,我需要两次读取响应(InputStream
):用于记录目的和解析响应。返回的InputStraem
是org.apache.harmony.luni.internal.net.www.protocol.http.ChunkedInputStream
的实例,不支持标记(is.markSupported()
返回false
)。HttpURLConnection读取InputStream两次
因此我不能mark()
和reset()
流,并在日志中写入响应后我无法解析它。当然,我可以在String
或其他地方读取响应一次,记录它们并稍后解析。但是当我使用流时,我会避免潜在的OutOfMemomryError
,因为流处理缓冲而不是我。
在这种情况下,什么是最好的解决方案,它将保持使用流的好处并帮助达到预期的结果:同时记录到日志和解析响应中?
编辑:解决方案与写作响应到临时文件是不恰当的
我想两次访问完整的流内容(内容是JSON格式的字符串):第一个 - 只是写在日志中,第二个 - 解析反应 –
无论哪种方式,一旦你有JSON格式的字符串传递给*解码*的方法,然后将返回的'String'传递给'log()'和'parse()'。一个Stream是我提到的两次,另一个回答 –
代码有缺陷,它忽略了'read()'的结果,所以它很容易在每个缓冲区结束时处理垃圾。 – EJP