目录
前言
之前的流我们都是使用他们读取一些字节或者字符的数据,但是在实际的应用中数据的类型除了基本数据类型之外,还有引用数据类型,对象流就是能读取引用数据类型的流
序列化和反序列化
对象流的本质是一个字节流,也是过程流
对象流的读取涉及两个概念:序列化和反序列化
假设我们没有对象流其实也可以把对象数据存到文件中,我们可以先获得所有对象属性的值,然后按照规则把这些数据拼成字符串,例如每个数据利用逗号隔开,写入文件。读数据时可以按照逗号拆分再重写拼成对象
我们将把对象拆开写入文件的过程称为序列化
将把对象读入内存重新组成对象的过程称为反序列化
以上的过程很麻烦,这也是广义上的序列化
在java中狭义的序列化就是使用对象流读取对象数据,这个过程更加简单方便
对象流的创建
FileOutputStream fos = new FileOutputStream("c:/z/2.txt") ;
ObjectOutputStream oos = new ObjectOutputStream(fos) ;
oos.writeObject(car);
oos.flush();
FileInputStream fis = new FileInputStream("c:/z/2.txt") ;
ObjectInputStream ois = new ObjectInputStream(fis) ;
Car c = (Car) ois.readObject();
System.out.println(c);
手动实现序列化的过程非常麻烦,但是使用对象流只要上面的几个步骤就好了
因为对象流是个过程流和字节流,所以需要配和文件字节流这个节点流
但是只有上面的代码是无法序列化的,还需要一个重要的步骤,我们需要告诉jvm这个类的对象是可以序列化的
public class Car implements Serializable {
private int cno ;
private String cname ;
private String color ;
private int price ;
}
要让需要序列化的对象实现Serializable 接口
这个接口什么代码都没有,作用就是起到一个标识作用,告诉jvm这个对象可以序列化
标签:JAVA,字节,对象,基础,private,new,序列化,读取 From: https://blog.csdn.net/weixin_65346668/article/details/141826689