java类序列化之后会怎么样,Java序列化的总结

为什么要序列化与反序列化

当我们的应用需要从网络获取包括文本、图片、音频、视频等资源时,这些数据都会以二进制序列的形式在网络上传送。发送方需要把这些Java对象转换为字节序列,然后在网络上传送,接收方需要从字节序列中恢复出Java对象。使用序列化之后才能将对象保存在本地,也才能将对象在网络上传输。

什么是序列化与反序列化

Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。

序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。

反序列化:客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。

除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。

序列化与反序列化如何实现

使用对象输入流ObjectOutputStream可将流转为对象,实现序列化;使用对象输入流ObjectInputStream读取对象,实现反序列化。

public static void main(String[] args) throws Exception {

Student student = new Student();

FileOutputStream fos=new FileOutputStream("F:"+File.separator+"TestFiles"+File.separator+"MyTest.txt");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(student);

oos.close();

FileInputStream fis = new FileInputStream("F:"+File.separator+"TestFiles"+File.separator+"MyTest.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

Student student2= (Student) ois.readObject();

System.out.println(student2);

}

Serializable 和 Parcelable 的区别

Serializable:使用简单,无需实现方法;缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。

Parcelable:序列化快;但要写一些模板代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值