读取二进制块时Lucene错误:java.io.EOFException

时间:2009-08-05 11:07:00

标签: java lucene search

从lucene索引读取二进制块时,我收到了java.io.EOFException。我将java对象存储为lucene索引字段中的字节数组,并在命中时将其读取。

这是堆栈跟踪:

引起:java.io.EOFException     at java.io.ObjectInputStream $ PeekInputStream.readFully(ObjectInputStream.java:2281)     at java.io.ObjectInputStream $ BlockDataInputStream.readShort(ObjectInputStream.java:2750)     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)     在java.io.ObjectInputStream。(ObjectInputStream.java:280)     at org.terracotta.modules.searchable.util.SerializationUtil $ OIS。(SerializationUtil.java:20)

我有一些写入索引的后台线程。但我缓冲它们然后立即写入1000.偶尔我也会在索引上发出optimize()。当我写作时,我正在重新打开IndexReader。这是否因为IndexReader重新打开电话而发生?

感谢。

此致 图莎尔

1 个答案:

答案 0 :(得分:0)

这看起来与lucene没有任何关系。相反,例外发生在兵马俑模块中。显然,在序列化过程中,可能会序列化您的java文件。我找不到这个兵马俑模块的javadoc,但是从堆栈跟踪看来,流的流长度被错误地指定给了序列化器。

正如Yuval F指出:lucene并非旨在处理二进制内容。它不是存储机制,不应该这样使用。您不能依赖从lucene获取正确序列化的字节码版本。