【问题标题】:Problems with serializable java可序列化java的问题
【发布时间】:2014-04-24 07:26:41
【问题描述】:

我正在尝试在 java 中实现可序列化,但我得到了一个异常。

这是我的可序列化类:

public class Serialize implements java.io.Serializable {
        private static final long serialVersionUID = 1L;
        public double dis1;
        public double dis2;
        public double error1;
        public double error2;
        public double coorx;
        public double coory;
        public double coorz;

    }

当我创建这个类的对象并尝试转换为字节时。

Serialize serial = new Serialize();
        serial.dis1 = dis1;
        serial.dis2 = dis2;
        serial.error1 = error1;
        serial.error2 = error2;
        serial.coorx = coorx;
        serial.coory = coory;
        serial.coorz = coorz;

        byte[] bytes = null;
        int length = 0;

        try {

            ByteArrayOutputStream bs = new ByteArrayOutputStream();
            ObjectOutputStream os = new ObjectOutputStream(bs);
            os.writeObject(serial); ///EXCEPCION
            os.close();
            bytes = bs.toByteArray();
            length = bytes.length;

        } catch (IOException e) {

            e.printStackTrace();
        }

我做错了什么?

Logcat:

04-24 09:15:29.734: W/System.err(4279): java.io.NotSerializableException: org.gradiant.sistole.locservice.Communication
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-24 09:15:29.734: W/System.err(4279):     at org.gradiant.sistole.locservice.Communication.datarequest(Communication.java:447)
04-24 09:15:29.734: W/System.err(4279):     at org.gradiant.sistole.locservice.UWBmain.process(UWBmain.java:311)
04-24 09:15:29.734: W/System.err(4279):     at org.gradiant.sistole.locservice.UWBmain$2.run(UWBmain.java:279)
04-24 09:15:29.734: W/System.err(4279):     at java.lang.Thread.run(Thread.java:841)

谢谢

【问题讨论】:

  • 你的对象叫做序列化?不是禁止吗?无论如何,问题似乎出在您的 org.gradiant.sistole.locservice.Communication 类
  • 我更改了班级名称,但问题仍然存在
  • 您的“序列化”类是否包含任何其他对象?我的意思是除了双字段。
  • 只是猜测...¿这是偶然的内部类吗?如果是这样,请将其设为静态!
  • 尝试修改你的serialVersionUID的值:private static final long serialVersionUID = 87418L; // 随机长 ...

标签: java android serialization


【解决方案1】:

看起来您尝试序列化 org.gradiant.sistole.locservice.Communication 类的对象,这是您尝试序列化的类中的对象吗?如果是这样,那么该对象还应该实现可序列化以序列化对象。如果您不需要该对象,您可以像这样使其瞬态:

 transient Communication comm = new Communication(...);

这个对象不会被序列化,如果你反序列化这个对象,它将为空。

如果您无法实现可序列化并且在反序列化时确实需要它,那么您必须想办法在反序列化时重建对象。

【讨论】:

  • 嗯,我不太明白。我要序列化的类(序列化)在通信类中。当我尝试序列化对象时,是在通信类的公共方法中
  • 通讯是它的超类型吗? writeObj() 的 javadoc 说:“将指定的对象写入 ObjectOutputStream。对象的类、类的签名、类及其所有超类型的非瞬态和非静态字段的值都写好了。”
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2014-09-09
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多