java - Java 中的序列化,类型代码 00 无效

标签 java serialization

读取序列化对象时出现错误(java.io.StreamCorruptedException:无效类型代码:00)。这是实现可序列化的类:

package guts;

import cc.mallet.classify.*;
import java.io.*;


public class NaiveBayesWithID implements Serializable  {

private NaiveBayes nb;
private static final long serialVersionUID = 1;
    private static final int CURRENT_SERIAL_VERSION = 1;

public NaiveBayesWithID(NaiveBayes nb) {
this.nb = nb;
}
public NaiveBayesWithID(){
this.nb = null;
}

    public void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    int version = in.readInt();
    if (version != CURRENT_SERIAL_VERSION)
        throw new ClassNotFoundException("Mismatched NaiveBayesTrainer versions: wanted " +
                CURRENT_SERIAL_VERSION + ", got " +
                version);

    //default selections for the kind of Estimator used

    NaiveBayesWithID test = (NaiveBayesWithID) in.readObject();
   // nb = test.returnNB();
    }

    public void writeObject(ObjectOutputStream out) throws IOException
    {
    out.writeInt(CURRENT_SERIAL_VERSION);

    //default selections for the kind of Estimator used
    out.writeObject(this);
    }

    public NaiveBayes returnNB(){
    return nb;
    }

    public void setNB(NaiveBayes nb){
        this.nb = nb;
    }

}

这是堆栈跟踪:

java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at java.util.ArrayList.readObject(ArrayList.java:593)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at cc.mallet.pipe.SerialPipes.readObject(SerialPipes.java:142)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at guts.NaiveBayesWithID.readObject(NaiveBayesWithID.java:29)
at controllers.Application.predict(Application.java:481)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:408)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:403)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:176)
at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:169)
at play.Invoker$Invocation.run(Invoker.java:187)
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:149)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)

有谁知道我如何获得有关该错误的更多信息?或者 java 期待哪个对象?

最佳答案

您已经实现了一个递归的writeObject 方法:当您将一个实例写入输出流时,它会调用 writeObject 方法,该方法写入一个 int,然后将对象写入输出流,这写一个 int 等。

serialVersionUID 字段的目标是检查对象是否兼容。它由序列化机制本地完成。除了在类更改时更改 serialVersionUID 值外,您无需执行任何操作。

关于java - Java 中的序列化,类型代码 00 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9217010/

相关文章:

java - 如何将小时、分钟格式化为 AM/PM 格式

java - 使用第二行和第三行偏移制作矩形网格?

C++ Boost 序列化 序列化模板派生类

java - 无法在 scala 中使用 jackson fastxml 将 json 数组反序列化为类对象

java - UI 线程等待其他线程执行 - 不工作

java - 如何在 RecyclerView 中对选中的项目数据值求和

java - 使用 Retrofit2 转换器转换错误响应数组

java - 尝试序列化 LocalDateTime 时出现 Jackson 序列化异常

c# - 使用 C# 使用 web 服务 php

c# - Json.net反序列化null guid案例