Nit*_*mer 6 java nonblocking jackson
我希望能够使用 Jackson (2) 读取 json 消息流(从套接字)。
有多种方法可以将 Reader 作为源传递,例如:
ObjectMapper mapper = new ObjectMapper();
MyObject obj = mapper.readValue(aReader, MyObject.class);
Run Code Online (Sandbox Code Playgroud)
但这会阻塞,直到整个 json 消息到达,我想避免这种情况。
有没有办法拥有一个缓冲区,我可以继续向其中添加字节,并能够询问缓冲区是否包含特定类的完整 json 表示?
就像是:
JsonBuffer buffer = new JsonBuffer(MyObject.class);
...
buffer.add(readBytes);
if (buffer.hasObject()) {
MyObject obj = buffer.readObject();
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
您可以用来JsonParser获取单个事件/令牌(这是ObjectMapper内部使用的),这允许更精细的访问。但当前所有功能都使用阻塞 IO,因此无法进行所谓的非阻塞(又名“异步”)解析。
编辑:2019-09-18 -- 更正:Jackson 2.9 ( https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.9 ) 添加了对非阻塞/异步 JSON 解析的支持 (问题https:// github.com/FasterXML/jackson-core/issues/57)