让JSON字符串跨越多个Socket receive()

时间:2012-08-06 20:24:09

标签: java android json sockets

现在我可以通过网络将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字符串,但我不知道如何判断它是什么时候。

我正在读这个:How to identify end of InputStream in java

但是为JSON字符串做最好的方法是什么?我认为这很常见,有一种标准的处理方式。感谢。

1 个答案:

答案 0 :(得分:1)

如果接收的数据超过缓冲区可以容纳的数量,则必须选择更大的缓冲区,或者重复读入缓冲区中的输入流,并在将其传递到parseJSON方法之前连接生成的json。 / p>

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

干杯, 汤姆