java - Weka模型在android中读取错误

标签 java android android-studio machine-learning weka

我在机器上创建了我的 weka 模型并将其导入到 android 项目中。当我尝试创建分类器时,当我尝试反序列化我创建的模型时,它会给出错误“exception.java.io.StreamCorruptedException”。该代码在机器上完美运行。

这是我的代码,

InputStream fis = null;

        fis = new InputStream("/modle.model");

        InputStream is = fis;

        Classifier cls = null;

       //here im getting the error when trying to read the Classifier
            cls = (Classifier) SerializationHelper.read(is);

        FileInputStream datais = null;

            datais = new FileInputStream("/storage/emulated/0/window.arff");


        InputStream dataIns = datais;
        DataSource source = new DataSource(dataIns);
        Instances data = null;
        try {
            data = source.getDataSet();
        } catch (Exception e) {
            e.printStackTrace();
        }
        data.setClassIndex(data.numAttributes() - 1);

        Instance in = new Instance(13);
        in.setDataset(data);
        in.setValue(0, testWekaModle1[0]);
        in.setValue(1, testWekaModle1[1]);
        in.setValue(2, testWekaModle1[2]);
        in.setValue(3, testWekaModle1[3]);
        in.setValue(4, testWekaModle1[4]);
        in.setValue(5, testWekaModle1[5]);
        in.setValue(6, testWekaModle1[6]);
        in.setValue(7, testWekaModle1[7]);
        in.setValue(8, testWekaModle1[8]);
        in.setValue(9, testWekaModle1[9]);
        in.setValue(10, testWekaModle1[10]);
        in.setValue(11, testWekaModle1[11]);

        double value = 0;

            value = cls.classifyInstance(in);

        in.setClassValue(value);

这是完整的堆栈跟踪,

java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2109)
java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
weka.core.SerializationHelper.read(SerializationHelper.java:288)
info.androidhive.sleepApp.model.ControllerWeka.wekaModle(ControllerWeka.java:81)
info.androidhive.sleepApp.activity.HomeFragment.extract(HomeFragment.java:278)
info.androidhive.sleepApp.activity.HomeFragment.stop(HomeFragment.java:146)
"info.androidhive.sleepApp.activity.HomeFragment$2.onClick(HomeFragment.java:107)"
android.view.View.performClick(View.java:4475)"
android.view.View$PerformClick.run(View.java:18786)"
android.os.Handler.handleCallback(Handler.java:730)"
dalvik.system.NativeStart.main(Native Method)"
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)"
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)"
java.lang.reflect.Method.invoke(Method.java:525)"
java.lang.reflect.Method.invokeNative(Native Method)"
android.app.ActivityThread.main(ActivityThread.java:5419)"
android.os.Looper.loop(Looper.java:137)"
android.os.Handler.dispatchMessage(Handler.java:92)"

请帮我解决这个问题。

最佳答案

这已解决,该模型是在不同的环境(PC)中创建的,并尝试在 android 环境中反序列化,但由于两种类型的 JDK 完全不同,因此出现错误。

关于java - Weka模型在android中读取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35455903/

相关文章:

android - 从eclipse导入项目到android studio

java - 使用kryo序列化注册类的含义

javascript - PDF在线数字签名

android - 字符串到度数坐标

android - 正则表达式将字母与点和破折号匹配(不能相邻)

android-studio - 如何修改 gradle 文件以在 NDK 目录中运行 Make?

java - 如何正确设置 Ant 路径ID?

java - IndexOutOfBoundsException : Index: 3, 大小:3

java - 有没有办法将 .ICO 文件解码为大于 16x16 的分辨率?

java - 将对象的信息传递给另一个 Activity