IO流知识体系中 对象流使用与理解


此知识点是在IO 流体系当中的最后一章节

一、对象流的分类:

ObjectInputStream 和 ObjectOutputStream
对象流作用:
用于存储和读取基本数据类型数据对象的处理流。它的强大之处就是可以把Java 中的对象写入到数据源中,也能把对象从数据源中还原会回来。
序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化机制:用ObjectInputStream类读取基本类型数据或对象的机制。

二、自定义类实现序列化和反序列化操作:

要想一个对象实现可序列化必须要满足以下的要求:

1、需要实现 Serializable 标识接口

2、当前类提供一个全局常量,定义一个全局常量long类型的:
private static final long serializableVersionUID =4567892L; // 序列版本号

3、如果不显示的定义,系统根据默认提供的版本号,会找不到并且程序会报错!显示 的定义出来 如果你需求改动在加字段就会找不到并且报错!

三、代码片段演示:

public class Person implements Serializable {
private static final long serializableVersionUID =4567892L; // 序列版本号
private String name;
private int age;
private String sex;
}
提供相应的get、set方法、toString 方法。


  • IO 流体系 对象流的使用
  • 对象序列化过程:将内存中的Java对象保存到磁盘中或通过网络传输出去。
  • 使用 ObjectOutputStream 实现,并且如下是字节流的方法使用。
  • object.txt 这个文件夹要提前在项目工程创建。

public class ObjectOutputStreamTest {
@Test
public void TestObjectOutputStream() {
ObjectOutputStream oos=null;
try {
oos = new ObjectOutputStream(new FileOutputStream(“object.txt”));
oos.writeObject(new String(“我爱山西太原”));
oos.flush();
oos.writeObject(new Person(“jimmy”,23,“男”));
oos.flush();
}catch (IOException e){
e.printStackTrace();
}finally {
if (oos !=null){
try {
oos.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}


  • 对象的反序列化机制:将磁盘文件中的对象还原为内存中的一个java对象
  • 使用:ObjectInputStream()

@Test
public void testObjectInputStream(){
ObjectInputStream ois =null;
try {
ois = new ObjectInputStream(new FileInputStream(“object.txt”));
Object obj = ois.readObject();
String str =(String)obj;
Person p =( Person) ois.readObject(); // 强转
System.out.println(str);
System.out.println§ ;
}catch (ClassNotFoundException | IOException e){
e.printStackTrace();
}finally {
if (ois !=null){
try{
ois.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}

四、代码观看步骤:

1、先看序列化

2、再看反序列化

3、在创建Person 类实现自定义类序列化和反序列化,并且显示定义long类型的全局常量:

private static final long serializableVersionUID =4567892L;

4、在原来的基础之上加了要序列化的对象及数据。

oos.writeObject(new Person(“jimmy”,23,“男”));
oos.flush();

5、在反序列化还原回去,并且输出。

Person p =( Person) ois.readObject(); // 强转

在这里插入图片描述

如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值