我有一个ObjectReader
从底层套接字InputStream
解析JSON输入如下:
jsonInput.readValue(handlerSocket.getInputStream());
其中jsonInput
是ObjectReader
对象。
我已经配置了jsonInput
解析经由由父readFor(Class<?>)
提供的默认ObjectMapper
方法的特定类型。在执行结束时,关断序列的一部分包括在关闭套接字输入即根据关于handlerSocket.shutdownInput()
套接字API调用Javadocs和shutdownInput()
:
在“流的末尾”地区在此套接字的输入流。发送到所述插座的输入流侧上的任何数据被确认,然后丢弃。如果你调用插座此方法后从套接字输入流中读取,该流的可用方法将返回0,其读取方法将返回-1(流的末尾)。
我就不得不提到关于这个特定的实现documentation的杰克逊readValue()
但几乎没有相关信息去。我的问题是那么如何看待杰克逊最终的流式场景,如这一个?将null
退换吗?一个解析例外呢?希望得到您的见解。
一般来说,EOF
是当你与流工作正常的情况。与EOF
问题将上升只有当一个人的JsonParser
的通知EOF
在JSON
对象的“中间”。当分析器将读取整个对象,将得到满足就不会有问题。由于版本2.8
Jackson
具有JsonEOFException
例外,其精确的时候会出现:
时引发当结束输入被意外地达到了专门JsonParseException,无论是内令牌被解码,或中间空白不是根级别的令牌之间的跳跃期间(即,是JSON对象或JSON阵列构建体内) 。
它是在其通过许多具体的解析器如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);
}