0
点赞
收藏
分享

微信扫一扫

对象流ObjectOutputStream与ObjectInputStream序列化对象

对象的本质是用来组织和存储数据的,对象本身也是数据。那么,能不能将对象存储到 硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和 反序列化来实现这些需求。

当两个进程远程通信时,彼此可以发送各种类型的数据。 无论是何种类型的数据,都 会以二进制序列的形式在网络上传送。比如,我们可以通过 http 协议发送字符串信息;我 们也可以在网络上直接发送 Java 对象。发送方需要把这个 Java 对象转换为字节序列,才能 在网络上传送;接收方则需要把字节序列再恢复为 Java 对象才能正常读取。

把 Java 对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为 Java 对象的 过程称为对象的反序列化
对象序列化的作用有如下两种:
 持久化: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
 网络通信:在网络上传送对象的字节序列。比如:服务器之间的数据通信、对象传 递。

ObjectOutputStream 代表对象输出流,它的 writeObject(Object obj)方法可对参数指定的 obj 对象进行序列化,把得到的字节序列写到一个目标输出流中。

ObjectInputStream 代表对象输入流,它的 readObject()方法从一个源输入流中读取字节 序列,再把它们反序列化为一个对象,并将其返回。
只有实现了 Serializable 接口的类的对象才能被序列化。Serializable 接口是一个空接口, 只起到标记作用。

package com.yqq.app9;

import lombok.*;

import java.io.Serializable;

/**
* @Author yqq
* @Date 2021/11/15 20:49
* @Version 1.0
*/
@Setter
@Getter
@Builder
@ToString
public class Users implements Serializable {
private int id;
private String name;
private String age;
}
package com.yqq.app9;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
* @Author yqq
* @Date 2021/11/15 20:54
* @Version 1.0
*/
public class ObjectOutputStreamObjectType {
public static void main(String[] args) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("d:/yqq1.txt"));
Users user = Users.builder()
.id(1)
.name("易青青")
.age("18岁")
.build();
oos.writeObject(user);
oos.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(oos!=null)
oos.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
package com.yqq.app9;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
* @Author yqq
* @Date 2021/11/15 21:01
* @Version 1.0
*/
public class ObjectInputStreamObjectType {
public static void main(String[] args) {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("d:/yqq1.txt"));
Users user = (Users) ois.readObject();
System.out.println(user);
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(ois!=null)
ois.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}

对象流ObjectOutputStream与ObjectInputStream序列化对象_字节序


举报

相关推荐

缓冲流,转化流,序列化对象

0 条评论