2014-06-25 55 views
0

JsonReader阅读器的相应方法之后是“读取器实例只需调用一次该方法”的规则。是否有任何标准工具从流中读取直到它结束?如何从Java中的文件读取MANY json对象?

+0

好东西!关于第一个选项。由于技术原因,我想留在JSR-353中。关于第二个。 InputStream是否可以保证上次读取它的位置?事实上它应该但是在任何文件中明确说明了这一点? –

+0

(将我的意见转移到答案) –

回答

0

您可以在相同的InputStream/Reader附近重复构建多个JsonReader。只要你不在流中做任何其他事情,只要解析器没有提前读取,每个连续的解析器都应该选择最后一次离开的位置。请注意,它是否可能读取未定义,并且可能是特定于实现的。另外请注意,这是常见的解析器实现关闭流/读者,给他们,你可能需要使用一个简单的流/读取器的包装,块的紧密,这样来抑制这样的:

Json.createReader(new NoCloseInputStream(myInputStream)); 

否则,请尝试一个不同的分析器。我有一个FOSS JSON parser,可以在我的网站上读取一系列谨慎的对象。

而且, JsonReader文件说, read()方法 需要只会被调用一次;它不会说它 必须只能被调用一次,所以它是值得重复调用 read()看看它是否工作。 没关系;如果readreadObjectreadArrayclose方法中的任何一个被调用多次,则记录该方法以抛出IllegalStateException

+0

“还要注意,解析器实现关闭它们给出的流/阅读器是很常见的”。它当然抛出一个异常,但不关闭封闭流。 javax.json.stream.JsonParsingException:意外的char 1 096 at(line no = 1,column no = 1,offset = 0)' –