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 に答える