54powerman
http://54powerman.blog.sohu.com
背景:
某项目中,要将某个自定义类MMessage对象,通过ObjectOutputStream和ObjectInputStream传递,该MMessage的特征描述:
1 该类未继承Serializable接口;
2 其父类Message的父类继承了Serializable接口;
3 其父类中有一个字段类型为java.io.ByteArrayOutputStream类型;
经测试发现,MMessage类序列化过程中,会抛出NotFoundSerializableException,提示如下:
Exception in thread "main" java.io.NotSerializableException: java.io.ByteArrayOutputStream
错误排查:
1 从错误来看,首先想到了看一下MMessage是否继承了Serializable接口,发现其父类的父类继承了Serializable接口,理论上,作为子类的MMessage也应该是可以被序列
分享到:
相关推荐
Java 中序列化 NotSerializableException 问题解决办法 Java 中序列化 NotSerializableException 问题是 Java 开发中常见的问题之一。 NotSerializableException 是 Java 中的一个异常,它发生在尝试序列化一个不...
a) 序列化对象时,需要确保对象类及其成员变量都是可序列化的,否则会抛出NotSerializableException异常。 b) 如果类中包含对象的引用,序列化时会递归地序列化所有引用的对象。 c) 在设计需要序列化的类时,应考虑...
为防止这种情况,可以使用`ObjectOutputStream`的`defaultWriteObject()`方法来禁止默认的序列化行为,或者使用`NotSerializableException`来阻止不应序列化的类。 6. **`transient`关键字** `transient`关键字...
3. `java.io.NotSerializableException`: 当尝试序列化一个未实现Serializable接口的对象时抛出的异常。 4. `sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`(非标准API):用于将字节数组编码为Base64字符串,...
- 序列化可能会导致安全问题,因为敏感信息可能被意外暴露。因此,谨慎处理序列化的数据,特别是当涉及到网络传输时。 总之,Java中的对象序列化和反序列化是处理对象状态的重要工具,适用于多种场景,但同时也...
3. **不可序列化对象引用**:如果一个可序列化的对象引用了一个不可序列化的对象,序列化操作会失败,并抛出`NotSerializableException`异常。可以通过在引用字段前添加`transient`关键字,使其在序列化时被忽略。 ...
如果一个类没有实现这个接口,尝试序列化其对象时会抛出`NotSerializableException`。 3. **transient关键字**: Java提供了`transient`关键字来标记那些不应该被序列化的字段。当一个字段被声明为`transient`,...
- 序列化可能导致安全问题,因为任何可以反序列化数据的人都可能执行对象的代码。因此,应当谨慎处理来自不可信源的序列化数据。 - 对于实现`Serializable`接口的类,应考虑实现`writeObject()`和`readObject()`方法...
- **不支持`Serializable`接口的对象**:在序列化过程中如果遇到未实现`Serializable`接口的对象,会抛出`NotSerializableException`异常。 - **不可序列化的字段**:类中可以声明`transient`关键字来标记某些字段不...
1. **所有涉及的对象都需要实现序列化**:如果一个类包含其他类的引用,并且这些类没有实现`Serializable`接口,那么在序列化时将会抛出`NotSerializableException`异常。 2. **`writeReplace`方法的返回类型必须是`...
### Java对象序列化详解 #### 一、Java对象序列化概念 Java平台提供了一种机制,使得开发人员能够在内存中创建可复用的对象。通常情况下,这些对象的存在依赖于JVM(Java虚拟机)的运行状态,即一旦JVM停止运行,...
需要注意的是,如果试图序列化一个未实现`Serializable`接口的对象,Java会抛出`NotSerializableException`异常。因此,确保所有需要持久化的类都实现这个接口是至关重要的。同时,序列化还可能涉及`transient`...
为了解决这个问题,可以将该引用标记为transient,从而跳过该成员变量的序列化。 Java对象序列化与反序列化是一种非常有用的机制,用于对象的存储和传输。通过使用Serializable接口和ObjectOutputStream/...
Java对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。这一过程的关键在于,它允许开发者将复杂的对象结构保存到磁盘或者通过网络发送,然后在需要时恢复这些对象。Java提供了内置的...
- **不可序列化对象**:如果一个可序列化对象引用了一个不可序列化的对象,序列化操作会失败并抛出`NotSerializableException`异常。因此,所有相关的对象都应实现`Serializable`接口。 - **`transient`关键字**:...
如果尝试序列化一个未实现`Serializable`接口的对象,系统会抛出`NotSerializableException`异常。 例如,以下是一个简单的可序列化类`User1`的定义: ```java public class User1 implements Serializable { ...
要实现序列化的类必须实现的java.io.Serializable或java.io.Externalizable接口,否则将产生一个NotSerializableException。该接口内部并没有任何方法,它只是一个"tagging interface",仅仅"tags"它自己的对象是一...
Java还提供了`java.io.ObjectStreamClass`和`java.io.ObjectStreamConstants`等辅助类来处理序列化相关的元数据,以及`java.io.NotSerializableException`和`java.io.OptionalDataException`等异常,它们分别在对象...
- 如果对象中引用了其他对象,这些对象也必须是可序列化的,否则会抛出`NotSerializableException`异常。 - 反序列化时,类的定义必须与序列化时的版本完全匹配。如果类发生了变化,比如添加、删除或修改了字段,...