我在计算机上创建了Weka模型,并将其导入到Android项目中。当我尝试创建分类器时,尝试反序列化我创建的模型时,出现了“exception.java.io.StreamCorruptedException”错误。在计算机上运行代码时一切正常。
这是我的代码,
InputStream fis = null; fis = new InputStream("/modle.model"); InputStream is = fis; Classifier cls = null; //在这里尝试读取分类器时出现错误 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类型完全不同而导致错误。