Jackson流发送不完整的JSON对象

时间:2015-08-18 18:09:32

标签: java json stream jackson

我想将JSON发送到套接字并使用JavaScript处理它。但不幸的是,JSON-Object并没有全部发送。在将对象data写入输出流之后,服务器接收JSON-Object,而不是等待之后发生的任何事情。

我如何写插座

jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("from", from);
jsonGenerator.writeObjectField("data", data);
jsonGenerator.writeEndObject();

服务器处理程序在某一时刻收到的内容

{"from":"me","data":{"one":1,"two":2}

正如您所看到的,最后}未写入。如果我在data字段之前写from对象,服务器就会得到这个:

{"data":{"one":1,"two":2}

JSON对象的其余部分将被发送,但不会作为一个实体,这使得在服务器上难以解析。

JsonGenerator就是这样创建的

JsonGenerator jsonGenerator = (new JsonFactory()).createGenerator(socket.getOutputStream());
jsonGenerator.setCodec(new ObjectMapper());

我怀疑它与编解码器设置有关。

服务器端

是一个简单的NodeJS,它记录来自套接字的数据。

net.createServer(function(socket) {
    socket.on("data", function(data) {
        console.log(data.toString());
    });
}).listen(8080);

您可以在控制台中看到JSON-Object通过2个不同的事件发送。当我尝试解析data时,它也会抛出错误,因为某些对象丢失了。

修改

我注意到有时它会发送整个JSON-Object,但是只发送一次20次,如果有的话。只发送字符串字段和数字字段可以完美地工作。

1 个答案:

答案 0 :(得分:1)

我发现您必须调用flush()close()才能缓冲部分数据。

从Javadoc for flush()

/**
 * Method called to flush any buffered content to the underlying
 * target (output stream, writer), and to flush the target itself
 * as well.
 */
@Override
public abstract void flush() throws IOException;
相关问题