• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

关于Java序列化你应该知道的一切

技术杂谈 勤劳的小蚂蚁 3个月前 (01-24) 69次浏览 已收录 0个评论 扫描二维码

什么是序列化

我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。
Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的。

怎么序列化一个对象?

要序列化一个对象,这个对象所在类就必须实现Java序列化的接口:java.io.Serializable。
1、类添加序列化接口
  1. import java.io.Serializable;
  2. publicclassUserimplementsSerializable{
  3.    privatestaticfinallong serialVersionUID =-8475669200846811112L;
  4.    privateString username;
  5.    privateString address;
  6.    publicString getUsername(){
  7.        return username;
  8.    }
  9.    publicvoid setUsername(String username){
  10.        this.username = username;
  11.    }
  12.    publicString getAddress(){
  13.        return address;
  14.    }
  15.    publicvoid setAddress(String address){
  16.        this.address = address;
  17.    }
  18.    @Override
  19.    publicString toString(){
  20.        return"User{"+
  21.                "username='"+ username +'''+
  22.                ", address='"+ address +'''+
  23.                '}';
  24.    }
  25. }
2、序列化/反序列化
可以借助commons-lang3工具包里面的类实现对象的序列化及反序列化,你没有必要自己写。
  1. import org.apache.commons.lang3.SerializationUtils;
  2. publicclassTest{
  3.    publicstaticvoid main(String[] args){
  4.        User user =newUser();
  5.        user.setUsername("Java");
  6.        user.setAddress("China");
  7.        byte[] bytes =SerializationUtils.serialize(user);
  8.        User u =SerializationUtils.deserialize(bytes);
  9.        System.out.println(u);
  10.    }
  11. }
输出:
  1. User{username='Java', address='China'}
上例通过序列化对象字节到内存然后反序列化,当然里面也提供了序列化磁盘然后再反序列化的方法,原理都是一样的,只是目标地不一样。

序列化注意事项

  • 序列化对象必须实现序列化接口。
  • 序列化对象里面的属性是对象的话也要实现序列化接口。
  • 类的对象序列化后,类的序列化ID不能轻易修改,不然反序列化会失败。
  • 类的对象序列化后,类的属性有增加或者删除不会影响序列化,只是值会丢失。
  • 如果父类序列化了,子类会继承父类的序列化,子类无需添加序列化接口。
  • 如果父类没有序列化,子类序列化了,子类中的属性能正常序列化,但父类的属性会丢失,不能序列化。
  • Java序列化的二进制字节数据只能由Java反序列化,不能被其他语言反序列化。如果要进行前后端或者不同语言之间的交互一般需要将对象转变成Json/Xml通用格式的数据,再恢复原来的对象。

  • 如果某个字段不想序列化,在该字段前加上transient关键字即可。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:关于Java序列化你应该知道的一切
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00