1

现在我可以通过网络将 JSON 字符串发送到我的 Android 应用程序。唯一的问题是,这些消息目前不超过几百个字符。这将很快扩展到每个 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;
    }
}

我打算使用 StringBuilder 来拼凑 JSON 字符串,但我不知道如何判断它何时完成。

我在读这个:如何在 java 中识别 InputStream 的结尾

但是对于 JSON 字符串,最好的方法是什么?我假设这很常见,并且有一种标准的处理方式。谢谢。

4

1 回答 1

1

如果接收到的数据多于缓冲区可以容纳的数据,则必须选择更大的缓冲区,或者重复将输入流读入缓冲区,并连接生成的 json,然后再将其传递给 parseJSON 方法。

对于任何 InputStream,如果 read 返回 -1,则表示已到达输入流的末尾,因此这也适用于您的 DataInputStream。

干杯,汤姆

于 2012-08-06T20:48:45.410 回答