Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
您好,
我正在使用httpUrlConnection
从webservice中检索json字符串。然后我从连接中获取inputStream
jsonString = readJSONInputStream(mHttpUrlconnection.getInputStream());
然后我使用以下函数读取输入流以获取JSON。
private String readJSONInputStream(final InputStream inputStream) {
log.log(Level.INFO, "readJSONInputStream()");
Reader reader = null;
try {
final int SIZE = 16092;
char[] buffer = new char[SIZE];
int bytesRead = 0;
int read = 0;
reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), SIZE);
bytesRead = reader.read(buffer);
String jsonString = new String(buffer, 0, bytesRead);
log.log(Level.INFO, "bytesRead: " + bytesRead + " [ " + jsonString + " ]");
/* Success */
return jsonString;
}
catch(IndexOutOfBoundsException ex) {
log.log(Level.SEVERE, "UnsupportedEncodingexception: " + ex.getMessage());
}
catch(IOException ex) {
log.log(Level.SEVERE, "IOException: " + ex.getMessage());
}
finally {
/* close resources */
try {
reader.close();
inputStream.close();
}
catch(IOException ex) {
log.log(Level.SEVERE, "IOException: " + ex.getMessage());
}
}
return null;
}
但是,如果json很小,说600 bytes
则一切正常(因此上面的代码适用于较小的数据)。但是我有一些大约15000 bytes
的JSON,因此我将最大大小设置为16092
。
然而,JSON只能读到大约6511
并且只是切断了。
我不明白如果JSON很小就没问题了。但对于较大的JSON,它每次都会切断相同的大小。
我在这里做错了什么。我应该检查的任何事情。
非常感谢任何建议,
答案 0 :(得分:3)
请尝试以下代码:
String readResponse(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
String result = "";
while ((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
答案 1 :(得分:2)
很可能你的代码在这里被破坏了:
bytesRead = reader.read(buffer);
你应该循环阅读。我想你不会从流中读出所有的字符。
答案 2 :(得分:1)
您应该继续从缓冲区读取,直到bytesRead = -1。
我怀疑读者正在缓冲数据并且一次只返回一定数量的数据。
尝试循环,直到bytesRead == -1,每个循环将读取数据附加到结果字符串。