对象流(objectInputStream 和ObjectOutputStream)

本文详细介绍了Java中对象序列化和反序列化的全过程,包括如何将内存中的对象转换为二进制流存储到硬盘,以及如何从硬盘文件中读取并转换为原始对象。探讨了实现Serializable接口的重要性,以及serialVersionUID在版本兼容性中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对面序列化过程 :将内存中的对象通过ObjectOutputStream转为二进制流,存储在硬盘文件中

对面序列化要满足的条件

1、对象所对应的类要实现Serializable接口

2、类的属性同样要实现Serializable接口

3、凡是实现Serializable接口都有一个表示序列化版本标识符的静态变量:

private static final long seriaVersionUID;来表示不同版本间的兼容性,

如果没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的,若类的源代码作了修改

,seriaVersionUID可能发生变化。建议显示声明。 确保不同版本相同的serialVersionUID.

 

  1. public void text(){
  2.           File f2=new File("C:\\Users\\ASUS\\Desktop\\hello3.txt");            //保存路径
  3.           people p=new people("12","花花");
  4.           ObjectOutputStream f3=null;
  5.         try {
  6.             f3 = new ObjectOutputStream(new FileOutputStream(f2));
  7.               f3.writeObject(p);
  8.               f3.flush();
  9.         } catch (FileNotFoundException e) {
  10.             // TODO Auto-generated catch block
  11.             e.printStackTrace();
  12.         } catch (IOException e) {
  13.             // TODO Auto-generated catch block
  14.             e.printStackTrace();
  15.         }finally{
  16.             
  17.             try {
  18.                 f3.close();
  19.             } catch (IOException e) {
  20.                 // TODO Auto-generated catch block
  21.                 e.printStackTrace();
  22.             }
  23.         }
  24.       }
  25. class people implements Serializable{
  26.     public String name;
  27.     public String arg;
  28.     public people(String name,String arg){
  29.         this.name=name;
  30.         this.arg=arg;
  31.     }
  32.     public String toString(){
  33.         return "people [name ="+name+",arg=" +arg+"]";
  34.     }
  35.     
  36.         
  37.     }

二、对面反序列化过程:将硬盘中的文件通过objectInputStream转换为相应的对象

  1. public void textInput(){
  2.         
  3.         
  4.          ObjectInputStream f=null;
  5.         people p=null;
  6.         try {
  7.             f = new ObjectInputStream(new FileInputStream("C:\\Users\\ASUS\\Desktop\\hello3.txt"));
  8.             p = (people)f.readObject();
  9.         } catch (FileNotFoundException e) {
  10.             // TODO Auto-generated catch block
  11.             e.printStackTrace();
  12.         } catch (ClassNotFoundException e) {
  13.             // TODO Auto-generated catch block
  14.             e.printStackTrace();
  15.         } catch (IOException e) {
  16.             // TODO Auto-generated catch block
  17.             e.printStackTrace();
  18.         }
  19.         System.out.println(p);
  20.         try {
  21.             f.close();
  22.         } catch (IOException e) {
  23.             // TODO Auto-generated catch block
  24.             e.printStackTrace();
  25.         }
  26.     }
  27.     };
  28. class people implements Serializable{
  29.     public String name;
  30.     public String arg;
  31.     public people(String name,String arg){
  32.         this.name=name;
  33.         this.arg=arg;
  34.     }
  35.     public String toString(){                               //输出
  36.         return "people [name ="+name+",arg=" +arg+"]";
  37.     } 
  38.     } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值