gpt4 book ai didi

java - 从底层 InputStream 解析时,Jackson 如何处理流结束读取(例如 -1、EOF)

转载 作者:行者123 更新时间:2023-11-30 05:47:36 27 4
gpt4 key购买 nike

我有一个ObjectReader解析来自底层套接字的 Json 输入 InputStream如下:

jsonInput.readValue(handlerSocket.getInputStream());

,其中jsonInputObjectReader对象。

我已经配置了jsonInput通过默认 readFor(Class<?>) 解析为特定类型方法提供者家长ObjectMapper 。在执行结束时,关闭序列的一部分涉及关闭套接字输入,即调用 handlerSocket.shutdownInput()并根据 Socket API Javadocs关于shutdownInput() :

Places the input stream for this socket at "end of stream". Any data sent to the input stream side of the socket is acknowledged and then silently discarded. If you read from a socket input stream after invoking this method on the socket, the stream's available method will return 0, and its read methods will return -1 (end of stream).

我会引用 jackson documentation关于readValue()的这个特定实现但几乎没有相关信息可以继续。我的问题是 jackson 如何处理像这样的流结束类型场景?会null被退回?解析异常?感谢您的见解。

最佳答案

通常,当您使用流时,EOF 是正常情况。仅当 JsonParser 之一注意到 EOF 位于 JSON 对象的“中间”时,EOF 问题才会出现。当解析器读取整个对象并感到满意时,就不会有问题了。自版本 2.8 Jackson 以来,有 JsonEOFException异常何时出现:

Specialized JsonParseException that is thrown when end-of-input is reached unexpectedly, either within token being decoded, or during skipping of intervening white-space that is not between root-level tokens (that is, is within JSON Object or JSON Array construct).

它用于内部com.fasterxml.jackson.core.base.ParserMinimalBase解析器类,该类由许多特定解析器扩展,例如UTF8StreamJsonParser。用于处理 EOF 的多种方法之一:

    protected void _reportInvalidEOF(String msg, JsonToken currToken) throws JsonParseException {
throw new JsonEOFException(this, currToken, "Unexpected end-of-input"+msg);
}

关于java - 从底层 InputStream 解析时,Jackson 如何处理流结束读取(例如 -1、EOF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54575318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com