如何杰克逊处理结束流中读取(例如-1,EOF)从底层InputStream解析时

问题描述 投票:1回答:1

我有一个ObjectReader从底层套接字InputStream解析JSON输入如下:

jsonInput.readValue(handlerSocket.getInputStream());

其中jsonInputObjectReader对象。

我已经配置了jsonInput解析经由由父readFor(Class<?>)提供的默认ObjectMapper方法的特定类型。在执行结束时,关断序列的一部分包括在关闭套接字输入即根据关于handlerSocket.shutdownInput()套接字API调用JavadocsshutdownInput()

在“流的末尾”地区在此套接字的输入流。发送到所述插座的输入流侧上的任何数据被确认,然后丢弃。如果你调用插座此方法后从套接字输入流中读取,该流的可用方法将返回0,其读取方法将返回-1(流的末尾)。

我就不得不提到关于这个特定的实现documentation的杰克逊readValue()但几乎没有相关信息去。我的问题是那么如何看待杰克逊最终的流式场景,如这一个?将null退换吗?一个解析例外呢?希望得到您的见解。

java json stream jackson
1个回答
1
投票

一般来说,EOF是当你与流工作正常的情况。与EOF问题将上升只有当一个人的JsonParser的通知EOFJSON对象的“中间”。当分析器将读取整个对象,将得到满足就不会有问题。由于版本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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.