Java基础系列(基础):Java序列化之java.io.Serializable!
前言
今天博主将为大家分享:Java基础系列(基础):Java序列化之java.io.Serializable!不喜勿喷,如有异议欢迎讨论!
什么是序列化
-
Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Java 对象原有的状态。
-
实际上,序列化的思想是 “冻结” 对象状态,传输对象状态(写到磁盘、通过网络传输等等),然后 “解冻” 状态,重新获得可用的 Java 对象。
-
那么,这里就要归功于 ObjectlnputStream / ObjectOutputStream 类、完全保真的元数据以及程序员愿意用Serializable标识接口标记他们的类,从而 “参与” 这个过程。
序列化一个对象?
要序列化一个对象,这个对象所在类就必须实现Java序列化的接口:java.io.Serializable。
类添加序列化接口
package com.test;
import java.io.Serializable;
import lombok.Data;
/**
*
* @Description: User用户实体类
* @ClassName: User.java
* @author ChenYongJia
* @Date 2019年6月02日 晚上23:25
* @Email chen87647213@163.com
*/
@Data
public class User implements Serializable {
private static final long serialVersionUID = -8475669200846866662L;
private String username;
private String username2;
}
序列化/反序列化
可以借助commons-lang3工具包里面的类实现对象的序列化及反序列化,你没有必要自己写。
<!-- pom依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
上代码测试下:
package com.test;
Import org.apache.commons.lang3.SerializationUtils;
/**
*
* @Description: switch case块
* @ClassName: SerTest.java
* @author ChenYongJia
* @Date 2019年4月12日 晚上23:25
* @Email chen87647213@163.com
*/
public class SerTest {
public static void main(String[] args) {
User user = new User();
user.setUsername("ChenYongJia ");
user.setUsername2("And MengMeng");
byte[] bytes = SerializationUtils.serialize(user);
User u = SerializationUtils.deserialize(bytes);
System.out.println(u);
}
}
输出:
User [username=ChenYongJia , username2=And MengMeng]
上例通过序列化对象字节到内存然后反序列化,当然里面也提供了序列化磁盘然后再反序列化的方法,原理都是一样的,只是目标地不一样。
序列化注意事项
-
序列化对象必须实现序列化接口。
-
序列化对象里面的属性是对象的话也要实现序列化接口。
-
类的对象序列化后,类的序列化ID不能轻易修改,不然反序列化会失败。
-
类的对象序列化后,类的属性有增加或者删除不会影响序列化,只是值会丢失。
-
如果父类序列化了,子类会继承父类的序列化,子类无需添加序列化接口。
-
如果父类没有序列化,子类序列化了,子类中的属性能正常序列化,但父类的属性会丢失,不能序列化。
-
用Java序列化的二进制字节数据只能由Java反序列化,不能被其他语言反序列化。如果要进行前后端或者不同语言之间的交互一般需要将对象转变成Json/Xml通用格式的数据,再恢复原来的对象。
-
如果某个字段不想序列化,在该字段前加上@Transient关键字即可。
到这里:Java基础系列(基础):Java序列化之java.io.Serializable!分享完毕了,快去试试吧!
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97799.html