【问题标题】:java.io.EOFException when reading weka trained model file读取 weka 训练的模型文件时出现 java.io.EOFException
【发布时间】:2016-09-27 05:37:27
【问题描述】:

我正在尝试加载经过 weka 训练的模型文件以生成预测。但是尝试执行此操作时出现 java.io.eofexception 错误。我确定这与我的模型文件没有正确形成有关。但是我使用weka工具创建了模型文件,不明白哪里出了问题。

代码

public Classifier loadModel() throws Exception {
    this.readConfFile();
    Classifier classifier;
    FileInputStream fis = new FileInputStream(
            prop.getProperty("Output_Model_Dir") + "/best3.model");
    ObjectInputStream ois = new ObjectInputStream(fis);

    Log.write.info("Load Classifier Successfully => "
            + prop.getProperty("Output_Model_Dir") + "/best3.model");
    classifier = (Classifier) weka.core.SerializationHelper.read(ois);
    Log.write.info("1");
    ois.close();
    Log.write.fine("Read Classifier Successfully");
    return classifier;
}

日志

INFO: Load Classifier Successfully => C:/Users/CRY$TAL/workspace/flysafews/system_files/best.model
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
    at weka.core.SerializationHelper.read(SerializationHelper.java:285)
    at flysafe.predict.support.FileHandler.loadModel(FileHandler.java:104)
    at flysafe.predict.core.PredictionManager.predict(PredictionManager.java:189)
    at flysafe.webservice.WebServiceHandler.predictQuery(WebServiceHandler.java:62)

PS:我使用了不同的模型文件。使用该文件时,除了 arff 结构不同的错误之外,代码都可以工作。

【问题讨论】:

  • @wero 49kb 。有效的只有 36kb
  • 问题在于 ObjectInputStream 甚至无法读取仅包含四个字节的流标头。访问问题?如果您执行四次fis.read() 会发生什么?它是否也返回 -1 表示到达 EOF?
  • 对不起,我有点不清楚。这里似乎有什么问题?
  • 它显示“第一个字节 172”

标签: java weka eofexception


【解决方案1】:

您将ObjectInputStream 传递给weka.core.SerializationHelper.read,它只需要InputStream,并将ObjectInputStream 包装在另一个ObjectInputStream 中,然后失败。

因此,只需将您的 FileInputStream fis 传递给 SerializationHelper.read

FileInputStream fis = new FileInputStream(...);            
classifier = (Classifier) weka.core.SerializationHelper.read(fis);

【讨论】:

  • 然后我得到这个错误。 java.io.StreamCorruptedException:无效的流标头:ED000573
  • @CraZyDroiD 你还创建自己的ObjectInputStream ois = new ObjectInputStream(fis)吗?
猜你喜欢
  • 2022-10-22
  • 2021-05-18
  • 2018-12-20
  • 1970-01-01
  • 2016-05-31
  • 2019-06-23
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多