我通過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