网站首页 > 技术文章 正文
序列化
Java的serialization提供一种持久化对象实例的机制。当进行远程通信时,无论何种类型的数据,都会以二进制序列的形式在网络上传送。序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或保存到文件、数据库等,并在需要时把该流读取出来重新构造成一个相同的对象。
Java中如何实现序列化
- 要实现序列化的类必须实现 java.lang.Serializable接口;
- 使用一个输出流,比如:FileOutputStream,构造一个ObjectOutputStream对象;
- 使用对象的writeObject方法将obj对象写出(即保存其状态),恢复时可以使用对应的输入流
transient
当序列化持久一个对象时,可能并不需要序列化持久所有的属性,对于这种情况,可以通过在属性前加上关键字transient来实现。
序列化的特点
- 如果一个类能被序列化,那么它的子类也能够被序列化;
- 由于static代表类的成员,transient代表对象的临时数据。被声明为这两种类型的数据成员不能够被序列化;
- 子类实现了java.lang.Serializable接口,父类没有,父类中的属性不能被序列化,但子类中的属性可以被序列化。
举例
class SuperClass{
public String name;
}
class Sub extends SuperClass implements Serializable {
private float radius;
transient int color;
public static String type = "type";
}
在序列化一个Sub类的对象sub到文件时,只有radius属性能被保存到文件中。
可以通过序列化与反序列化来破坏设计模式中的单例模式(只能被实例化一个对象的类)。前提是单例类实现java.lang.Serializable 接口。序列化对象保存到文件,然后反序列化文件生成一个对象,堆中出现了两个类的实例对象,虽然对象的各类型属性的值一样,但id不一样。从而破坏了单例模式
猜你喜欢
- 2024-10-01 3W 字详解 Java 集合 3w+字详解+java+集合使用
- 2024-10-01 一次线上故障:数据库连接池泄露后的思考
- 2024-10-01 听说这四个概念,很多Java老手都说不清,你能分得清么?
- 2024-10-01 JPA Transient示例 jpa truncate
- 2024-10-01 Java序列化和反序列化 java序列化和反序列化错误的是
- 2024-10-01 12张图带你彻底理解Java中的各种锁
- 2024-10-01 Java 从入门到放弃(二):修饰符 java中的修饰符有哪些?
- 2024-10-01 你真的以为你了解Java的序列化了吗?
- 2024-10-01 字节码混淆:实现Java字节码加密的实战解析
- 2024-10-01 你知道Transient 关键字吗? nastran关键字帮助文档
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)