2013-10-10 41 views
0

正在嘗試使用緩衝讀取器讀取JSON響應,如下所示。我正在使用Apache Commons Http客戶端。響應以單行JSON形式出現,字符數不超過1060000,大小約爲1 MB。我所面臨的問題只是流的一部分被讀者讀取而其他部分不見了。我如何閱讀完整的JSON而不會丟失任何數據?這是否與BufferedReader的'CharBufferSize'或流中的字符數量有關?JAVA IO:使用BufferedReader讀取流的問題

InputStream stream = method.getResponseBodyAsStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); 
StringBuilder builder = new StringBuilder(); 
String line; 
while ((line = reader.readLine()) != null) { 
    builder.append(line); 
} 
+0

得到任何錯誤??? –

+0

您不需要* BufferedInputStream *和* BufferedReader。我什至不明白你爲什麼需要StringBuilder。當然,你可以直接從網絡解析響應? – EJP

+0

編輯code.Yah BufferedInputStream不是必需的。 @HussainAkhtarWahid沒有得到任何錯誤。但最終我只獲得了完整字符串的一部分。 – aravindaM

回答

0

嘗試使用json解析器。

import org.codehaus.jackson.*; 

    JsonFactory fac = new JsonFactory(); 
    JsonParser parser = fac .createJsonParser(stream); 
0

如果你只是想完整流複製到StringBuilder,你應該使用InputStreamReaderchar -array緩衝。

InputStream stream = method.getResponseBodyAsStream(); 

InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); 
StringBuilder builder = new StringBuilder(); 

char[] buffer = new char[4096]; 
int read; 
while ((read = reader.read(buffer)) != -1) { 
    builder.append(buffer, 0, read); 
} 
0

最後我能使用IOUtils在Apache的百科全書庫來解決。這是代碼。

BoundedInputStream boundedInputStream= new BoundedInputStream(stream); 
BufferedReader reader = new BufferedReader(new InputStreamReader(boundedInputStream,"UTF-8")); 

StringBuilder builder= new StringBuilder(); 
StringBuilderWriter writer = new StringBuilderWriter(builder); 

IOUtils.copy(reader, writer); 

雖然這是一段時間,但它可能對某人有幫助。

這裏是原始源Most Robust way of reading a file or stream using Java (To prevent DoS attacks)