什么是 java 序列化?什么情况下需要序列化?
JAVA 什么 需要 情况 序列化
2023-09-11 14:16:28 时间
什么是 java 序列化?什么情况下需要序列化?
序列化:将 Java 对象转换成字节流的过程。
反序列化:将字节流转换成 Java 对象的过程。
当Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。
序列化的实现:类实现 Serializable 接口,这个接口没有需要实现的方法。实现 Serializable 接口是为了告诉 jvm 这个类的对象可以被序列化。
注意事项:
- 某个类可以被序列化,则其子类也可以被序列化
- 声明为 static 和 transient 的成员变量,不能被序列化。static 成员变量是描述类级别的属性,transient 表示临时数据
- 反序列化读取序列化对象的顺序要保持一致
具体使用
package constxiong.interview;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* 测试序列化,反序列化
* @author ConstXiong
* @date 2019-06-17 09:31:22
*/
public class TestSerializable implements Serializable {
private static final long serialVersionUID = 5887391604554532906L;
private int id;
private String name;
public TestSerializable(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "TestSerializable [id=" + id + ", name=" + name + "]";
}
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException, ClassNotFoundException {
//序列化
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("TestSerializable.obj"));
oos.writeObject("测试序列化");
oos.writeObject(618);
TestSerializable test = new TestSerializable(1, "ConstXiong");
oos.writeObject(test);
//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("TestSerializable.obj"));
System.out.println((String)ois.readObject());
System.out.println((Integer)ois.readObject());
System.out.println((TestSerializable)ois.readObject());
}
}
打印结果:
测试序列化
618
TestSerializable [id=1, name=ConstXiong]
【Java面试题与答案】整理推荐
相关文章
- java集合(3)- Java中的equals和hashCode方法详解
- phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou
- 回归JAVA: java文件编译后,出现xx$1.class的原因
- Java核心技术卷I基础知识3.6.3 不可变字符串
- Java: i=i++字节码分析
- DNS java
- Java当中的集合框架Map
- java 用文件对话框打开文件
- Java之所有对象的公用方法>9.Always override hashCode when you override equals
- Java 并发工具包 java.util.concurrent 大全
- 1. java.util.concurrent - Java 并发工具包
- java提取字符串数字,Java获取字符串中的数字
- Java配置环境变量、方法和原因
- Java学习-003-JDK、JRE、JVM简介
- java.io.FileNotFoundException: E:workwork (拒绝访问。)
- 三种方法实现java调用Restful接口
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- Java打印输出:java在线8x8x
- Java .class 反编译 Luyten,导出 .java文件,查看jar 包目录,超级简单,实用
- 浅析Java如何使用docker-java库操作DockerAPI
- Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
- Java面向对象编程(二)
- 1.2.4 Java Annotation 提要
- 简单的JAVA MVC框架模式--Java-servlet-JavaBean
- 什么是Java序列化,如何实现java序列化
- Java 报错 Information:java: javacTask: 源发行版 8 需要目标发行版 1.8
- Java中java.util.Arrays参考指南