Java:Json异常
我在J2ME中工作 我从服务器得到json响应,然后我尝试按照我的要求解析这个json数据 这是我从服务器获取响应的代码:-Java:Json异常,java,java-me,Java,Java Me,我在J2ME中工作 我从服务器得到json响应,然后我尝试按照我的要求解析这个json数据 这是我从服务器获取响应的代码:- InputStream inputStream = null; OutputStreamWriter out = null; byte[] readData = new byte[50000]; String response = "no"; try { // --- write ---
InputStream inputStream = null;
OutputStreamWriter out = null;
byte[] readData = new byte[50000];
String response = "no";
try {
// --- write ---
out = new OutputStreamWriter(connection.openOutputStream(), "UTF-8");
out.write(data.toString());
out.close();
// --- read ---
int responseCode = connection.getResponseCode();
if (responseCode != HttpConnection.HTTP_OK) {
throw new IOException("HTTP response code: " + responseCode);
}
inputStream = connection.openInputStream();
int actual = inputStream.read(readData);
response = new String(readData, 0, actual, "UTF-8");
return response;
}
当来自服务器的响应很小时,它工作得很好,但如果响应很大,它将得到响应的一半并返回到我的另一个方法。请建议我如何将大量数据放入readData和response变量中
先谢谢你 您需要在之前读取所有数据(流中可能有更多数据) 正如您所注意到的,
InputStream.read
的调用不能保证您填充缓冲区(readData
),它返回了当时可以读取的字节数。你的缓冲区有多大并不重要
您需要读取并重新调用InputStream.read
方法来检查流中是否有所有可用数据。当没有更多数据可用时,read
方法将返回-1
这是一个示例,您可以这样做:
....
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int read;
byte[] tmp = new byte[1024];
while ((read = inputStream.read(tmp)) != -1)
bos.write(tmp, 0, read);
return new String(bos.toByteArray(), "UTF-8");
另外,当您完成
连接时
应该在其上调用关闭
,以便系统知道您不再需要它。您需要在读取后刷新并关闭输入流
inputStream.close();
那我该怎么做。。?我是否应该为字节[]readData=新字节[50000];添加更多内存字节@PushpendraKuntal:更新为示例:)在
InputStream
上没有flush
方法(我想你把它和OutputStream
混淆了)。但是,关闭不会帮助你获得更多的输入,那只是为了事后清理。。。