Java: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 ---

我在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;

        } 
当来自服务器的响应很小时,它工作得很好,但如果响应很大,它将得到响应的一半并返回到我的另一个方法。请建议我如何将大量数据放入readDataresponse变量中


先谢谢你

您需要在之前读取所有数据(流中可能有更多数据)

正如您所注意到的,
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
混淆了)。但是,关闭不会帮助你获得更多的输入,那只是为了事后清理。。。