从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重新打开电话而发生?
感谢。
此致 图莎尔
答案 0 :(得分:0)
这看起来与lucene没有任何关系。相反,例外发生在兵马俑模块中。显然,在序列化过程中,可能会序列化您的java文件。我找不到这个兵马俑模块的javadoc,但是从堆栈跟踪看来,流的流长度被错误地指定给了序列化器。
正如Yuval F指出:lucene并非旨在处理二进制内容。它不是存储机制,不应该这样使用。您不能依赖从lucene获取正确序列化的字节码版本。