前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ObjectInputStream类实现对象的反序列,ObjectOutputStream类实现对象的序列化流

ObjectInputStream类实现对象的反序列,ObjectOutputStream类实现对象的序列化流

作者头像
Java进阶者
发布2021-11-19 14:47:34
3270
发布2021-11-19 14:47:34
举报

前言

本文主要学习ObjectInputStream类实现对象的反序列,ObjectOutputStream类实现对象的序列化流,接下来小编带大家一起来学习!

一、 ObjectInputStream类

1.ObjectInputStream是对象的反序列化流,它是InputStream类的子类。

2.ObjectInputStream类的构造方法

public ObjectInputStream(InputStream in):创建指定的输入流对象读取ObjectInputStream。参数in表示指定的输入流对象。

例子:

代码语言:javascript
复制
FileInputStream fs=new FileInputStream("test.txt");
ObjectInputStream os=new ObjectInputStream(fs);

3.使用ObjectInputStream类实现对象的反序列化例子

代码语言:javascript
复制
import java.io.*;

class Person implements Serializable{
// 实现序列化接口
private String id,name;
private int age;
//构造方法
public Person(String id,String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
}

public String getId() {
        return id;
}

public void setId(String id) {
        this.id = id;
}

public String getName() {
        return name;
}

public void setName(String name) {
        this.name = name;
}

public int getAge() {
        return age;
}

public void setAge(int age) {
        this.age = age;
}

}
public class P18{
public static void main(String[] args) throws Exception {
//创建文件输入流对象,读取指定的文件
FileInputStream fs=new FileInputStream("text/test");
//创建对象输入流
ObjectInputStream os=new ObjectInputStream(fs);
//读取Person对象
Person p=(Person)os.readObject();
System.out.println("读取文本的数据后显示:");
System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
  }
}

运行的结果如下图所示:

从上面的代码中因为Person类中属性的私有的,使用访问器的方法set和get的方法,当调用ObjectInputStream的readObject()方法把text目录下的test的Person对象数据读取出来,这个就是反序列化。

二、ObjectOutputStream类

1.ObjectOutputStream是对象的序列化流,它是OutputStream类的子类。

2.ObjectOutputStream类的构造方法

public ObjectOutputStream(OutputStream out):创建指定的输出流对象写入ObjectOutputStream。参数out表示指定的输出流对象。

例子:

代码语言:javascript
复制
FileOutputStream fs=new FileOutputStream("test.txt");
ObjectOutputStream os=new ObjectOutputStream(fs);

对象输出流使用writeObject(Object obj)方法将一个对象obj写入到一个文件,对象输入流使用readObject()方法从源中读取一个对象到程序中。

3.使用ObjectOutputStream类实现对象的序列化例子

代码语言:javascript
复制
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Person implements Serializable{
// 实现序列化接口
private String id,name;
private int age;
//构造方法
public Person(String id,String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
}

public String getId() {
        return id;
}

public void setId(String id) {
        this.id = id;
}

public String getName() {
        return name;
}

public void setName(String name) {
        this.name = name;
}

public int getAge() {
        return age;
}

public void setAge(int age) {
        this.age = age;
}
public static void main(String[] args) throws IOException {
//创建一个Person对象
Person p=new Person("C01","进阶者",18);
System.out.println("写入文件前的数据:");
System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
//创建文件输出流对象,把数据写入text目录下的test.txt文件中
FileOutputStream fs=new FileOutputStream("text/test.txt");
//创建对象输出流
ObjectOutputStream os=new ObjectOutputStream(fs);
os.writeObject(p);
  }
}

运行的结果如下图所示:

从上面的代码中,首先是对Person对象进行实例化,它的id为c01,name为进阶者,年龄为18。当调用ObjectOutputStream的writeObject()方法将Person对象写入text目录下的test.txt。这就实现了序列化!

三、总结

本文主要介绍了ObjectInputStream类、ObjectOutputStream类。ObjectInputStream类是对象的反序列化流,它是InputStream类的子类,介绍了它的构造方法和方法,通过一个例子来学习使用ObjectInputStream类实现对象的反序列化。ObjectOutputStream类是是对象的序列化流,它是OutputStream类的子类,通过一个例子来学习使用ObjectOutputStream类实现对象的序列化。希望大家通过本文的学习,对你有所帮助!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java进阶学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 ObjectInputStream类
  • 二、ObjectOutputStream类
  • 三、总结
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档