0

我在 J2ME 中工作。

我从服务器收到 json 响应,然后我尝试根据我的要求解析这个 json 数据。

这是我从服务器获取响应的代码:-

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响应变量中。

先感谢您。

4

2 回答 2

2

您需要先读取所有数据(流中可能有更多数据)。

正如您注意到的那样,调用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");

此外,当您完成后,connection您应该调用close它,以便系统知道您不再需要它。

于 2012-06-18T12:45:40.597 回答
0

您需要在阅读后刷新并关闭您的输入流!!!

inputStream.close();
于 2012-06-18T12:56:13.763 回答