1

今のところ、ネットワーク経由で Android アプリに JSON 文字列を送信できます。唯一のことは、現時点でメッセージの長さが数百文字を超えていないことです。これはまもなく、JSON 文字列ごとに数千文字に拡張されます。パーサーに送信する前に JSON 文字列全体を受信したことを確認するにはどうすればよいですか (そうしないとクラッシュします)。

たとえば、スレッドでデータを受信する基本的な方法は次のとおりです。

while (true) 
{
    try 
    {
        // Read from the DataInputStream
        bytes = mmDataIn.read(buffer); //buffer is a 4096 size byte[]
        Log.d("JSON", "dataread: " + String.valueOf(bytes)); //only prints stuff > 0
        parseJSON(buffer); //will not work unless full JSON
    } 
    catch (IOException e) 
    {
        Log.e("JSON", "disconnected", e);
        break;
    }
}

JSON 文字列をつなぎ合わせるために StringBuilder を使用することを計画していましたが、それがいつ完了したかを知る方法がわかりません。

私はこれを読んでいました: JavaでInputStreamの終わりを識別する方法

しかし、JSON 文字列に対してそれを行う最善の方法は何でしょうか? これは非常に一般的であり、標準的な処理方法があると思います。ありがとう。

4

1 に答える 1

1

バッファが保持できるよりも多くのデータを受信する場合は、より大きなバッファを選択するか、入力ストリームをバッファに繰り返し読み取り、結果のjsonを連結してからparseJSONメソッドに渡す必要があります。

InputStreamの場合、readが-1を返す場合は、入力ストリームの終わりに到達したことを意味するため、これはDataInputStreamにも適用されます。

乾杯、トム

于 2012-08-06T20:48:45.410 に答える