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

时间:2022-10-29 14:15:15

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

大家好,我是Java进阶者。

前言

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

一、 ObjectInputStream类

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

2.ObjectInputStream类的构造方法

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

例子:

  1. FileInputStream fs=new FileInputStream("test.txt");
  2. ObjectInputStream os=new ObjectInputStream(fs);

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

  1. import java.io.*;
  2. class Person implements Serializable{
  3. // 实现序列化接口
  4. private String id,name;
  5. private int age;
  6. //构造方法
  7. public Person(String id,String name, int age) {
  8. this.id = id;
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public String getId() {
  13. return id;
  14. }
  15. public void setId(String id) {
  16. this.id = id;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public int getAge() {
  25. return age;
  26. }
  27. public void setAge(int age) {
  28. this.age = age;
  29. }
  30. }
  31. public class P18{
  32. public static void main(String[] args) throws Exception {
  33. //创建文件输入流对象,读取指定的文件
  34. FileInputStream fs=new FileInputStream("text/test");
  35. //创建对象输入流
  36. ObjectInputStream os=new ObjectInputStream(fs);
  37. //读取Person对象
  38. Person p=(Person)os.readObject();
  39. System.out.println("读取文本的数据后显示:");
  40. System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
  41. }
  42. }

运行的结果如下图所示:

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

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

二、ObjectOutputStream类

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

2.ObjectOutputStream类的构造方法

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

例子:

  1. FileOutputStream fs=new FileOutputStream("test.txt");
  2. ObjectOutputStream os=new ObjectOutputStream(fs);

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

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

  1. import java.io.FileOutputStream;
  2. import java.io.IOException;
  3. import java.io.ObjectOutputStream;
  4. import java.io.Serializable;
  5. public class Person implements Serializable{
  6. // 实现序列化接口
  7. private String id,name;
  8. private int age;
  9. //构造方法
  10. public Person(String id,String name, int age) {
  11. this.id = id;
  12. this.name = name;
  13. this.age = age;
  14. }
  15. public String getId() {
  16. return id;
  17. }
  18. public void setId(String id) {
  19. this.id = id;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public int getAge() {
  28. return age;
  29. }
  30. public void setAge(int age) {
  31. this.age = age;
  32. }
  33. public static void main(String[] args) throws IOException {
  34. //创建一个Person对象
  35. Person p=new Person("C01","进阶者",18);
  36. System.out.println("写入文件前的数据:");
  37. System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
  38. //创建文件输出流对象,把数据写入text目录下的test.txt文件中
  39. FileOutputStream fs=new FileOutputStream("text/test.txt");
  40. //创建对象输出流
  41. ObjectOutputStream os=new ObjectOutputStream(fs);
  42. os.writeObject(p);
  43. }
  44. }

运行的结果如下图所示:

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

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

三、总结

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

原文链接:https://mp.weixin.qq.com/s/2hV6ujhLOGCc7CKzGIw_ww