• 6-对象流(对象的序列化)


      1 package com.io;
      2 
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.io.ObjectInputStream;
      8 import java.io.ObjectOutputStream;
      9 import java.io.Serializable;
     10 
     11 import org.junit.Test;
     12 
     13 /**
     14  * 
     15  * 1、对象的序列化机制:把内存中的java对象转换成与平台无关的二进制流,
     16  * 持久地保存地磁盘上或通过网络传输到另一个节点
     17  * 2、反序列化: 当其它程序获取了这种二进制流以后,可以恢复成原来的对象
     18  *
     19  * 
     20  */
     21 public class 对象流 {
     22     @Test
     23     public void objOutputStreamTest(){
     24         Person p1 = new Person("小明",22);
     25         Person p2 = new Person("小红",23);
     26         
     27         ObjectOutputStream oos = null;
     28         try {
     29             oos = new ObjectOutputStream(new FileOutputStream(new File("obj.txt")));
     30             oos.writeObject(p1);
     31             oos.writeObject(p2);
     32             oos.flush();
     33         } catch (IOException e) {
     34             // TODO Auto-generated catch block
     35             e.printStackTrace();
     36         }finally{
     37             try {
     38                 oos.close();
     39             } catch (IOException e) {
     40                 e.printStackTrace();
     41             }
     42         }
     43     }
     44     
     45     @Test
     46     public void readObject(){
     47         ObjectInputStream ois = null;
     48         try {
     49             ois = new ObjectInputStream(new FileInputStream(new File("obj.txt")));
     50             
     51             Person p1 = (Person) ois.readObject();
     52             Object p2 = (Object)ois.readObject();
     53             System.out.println(p1);
     54             System.out.println(p2);
     55         } catch ( IOException e) {
     56             // TODO Auto-generated catch block
     57             e.printStackTrace();
     58         } catch (ClassNotFoundException e) {
     59             // TODO Auto-generated catch block
     60             e.printStackTrace();
     61         }finally{
     62             try {
     63                 ois.close();
     64             } catch (IOException e) {
     65                 // TODO Auto-generated catch block
     66                 e.printStackTrace();
     67             }
     68         }
     69     }
     70 }
     71 
     72 /**
     73  * 
     74  * @author Administrator
     75  *要实现序列化的类要求:
     76  *(1)类是可序列化的:实现Serializable接口
     77  *(2)类的属性是可序列化的,属性也继承Serializable接口
     78  *(3)使用static 和 transient关键字修饰的属性不可被序列化
     79  *(4)提供一个版本号serialVersionUID
     80  */
     81 
     82 
     83 /*
     84  * 凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:
     85 private static final long serialVersionUID;
     86 serialVersionUID用来表明类的不同版本间的兼容性
     87 如果类没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID 可能发生变化。故建议,显示声明
     88 显示定义serialVersionUID的用途
     89 希望类的不同版本对序列化兼容,因此需确保类的不同版本具有相同的serialVersionUID
     90 不希望类的不同版本对序列化兼容,因此需确保类的不同版本具有不同的serialVersionUID
     91 
     92  */
     93 class Person implements Serializable{
     94     /**
     95      * 
     96      */
     97     private static final long serialVersionUID = -8305586168290840729L;
     98 
     99     private String name ;
    100     
    101     private int age;
    102     
    103     public Person(String name,Integer age){
    104         this.name = name;
    105         this.age = age;
    106     }
    107 
    108     /* (non-Javadoc)
    109      * @see java.lang.Object#toString()
    110      */
    111     @Override
    112     public String toString() {
    113         return "Person [name=" + name + ", age=" + age + "]";
    114     }
    115     
    116     
    117 }
  • 相关阅读:
    zstu.4189: 逻辑运算(构建 && 前缀表达式入门)
    Oulipo (kmp)
    zstu.4194: 字符串匹配(kmp入门题&& 心得)
    杭赛.Triangle(数学推导)
    cf.VK CUP 2015.C.Name Quest(贪心)
    微服务技术栈
    luogu3320 寻宝游戏 (dfs序+倍增lca+set)
    cf757F Team Rocket Rises Again (dijkstra+支配树)
    cf983E NN Country (倍增+dfs序+树状数组)
    cf860E Arkady and A Nobody-men (树剖)
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5026147.html
Copyright © 2020-2023  润新知