zoukankan      html  css  js  c++  java
  • JavaSE-20 IO序列化

    学习要点

    • 定义
    • IO如何序列化

    序列化 

    • 序列化:是将对象的状态存储到特定存储介质中的过程。
    • 反序列化:从特定存储介质中的数据重新构建对象的过程。
    • 实现了java.io.Serializable接口的类才能进行序列化操作。

    IO序列化

    1  序列化相关类

    ObjectOutputStream

    常用构造方法

    public ObjectOutputStream(OutputStream out)  //使用FileOutputStream

    常用方法

    void writeObject(Object obj)

    2  反序列化相关类

    ObjectInputStream

    常用构造方法

    public ObjectInputStream(InputStream in)   //使用FileInputStream

    常用方法

    void readObject()

    3  示例代码

    /**学生类*/
    
    package com.etc.seri;
    
    import java.io.Serializable;
    
    public class Student implements Serializable {//实现序列化接口
    
       private String name;
    
       private int age;
    
       private String gender;
    
       private transient String password;// 密码通常不进行序列化
    
     
    
       public Student(String name, int age, String gender) {
    
           this.name = name;
    
           this.age = age;
    
           this.gender = gender;
    
       }
    
     
    
       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 String getGender() {
    
           return gender;
    
       }
    
       public void setGender(String gender) {
    
           this.gender = gender;
    
       }
    
    }
    
     
    
    /**测试类*/
    
    package com.etc.seri;
    
    import java.io.File;
    
    import java.io.FileInputStream;
    
    import java.io.FileNotFoundException;
    
    import java.io.FileOutputStream;
    
    import java.io.IOException;
    
    import java.io.ObjectInputStream;
    
    import java.io.ObjectOutputStream;
    
     
    
    public class Test {
    
           public static void main(String[] args) {        
    
                  Student student=new Student("张三", 21, "男", "123321");
    
                  File file =new File("F:\MyJava\chapter17\src\com\etc\seri\db.ini");
    
                  //saveObj(student, file);                
    
                  Student zs = getObj(file);
    
                  System.out.println(zs.getName()+zs.getPassword());
    
           }
    
     
    
           /** 序列化 */
    
           public static void saveObj(Student student, File file) {
    
                  ObjectOutputStream oos = null;
    
                  try {
    
                         oos = new ObjectOutputStream(new FileOutputStream(file));
    
                         oos.writeObject(student);
    
                         System.out.println("序列化成功!");
    
                  } catch (FileNotFoundException e) {
    
                         e.printStackTrace();
    
                  } catch (IOException e) {
    
                         e.printStackTrace();
    
                  } finally {
    
                         try {
    
                                if (oos != null) {
    
                                       oos.close();
    
                                }
    
                         } catch (IOException e) {
    
                                e.printStackTrace();
    
                         }
    
                  }
    
           }
    
     
    
           /** 反序列化 */
    
           public static Student getObj(File file) {
    
                  ObjectInputStream ois = null;
    
                  Student student=null;
    
                  try {
    
                         ois = new ObjectInputStream(new FileInputStream(file));
    
                         student=(Student)ois.readObject();//读出学生对象数据
    
    System.out.println("读取学生信息成功!");
    
                  } catch (FileNotFoundException e) {
    
                         e.printStackTrace();
    
                  } catch (IOException e) {
    
                         e.printStackTrace();
    
                  } catch (ClassNotFoundException e) {
    
                         e.printStackTrace();
    
                  }
    
                  return student;
    
           }
    
    }
    

      

    上机练习

    需求说明

    • 网上购物时某用户填写订单,订单内容为:用户名、商品编号、商品名称、单价、数量
    • 商品列表,保存在“Order.bin”中。
    • 运行时,如果不存在“Order.bin”,则进行新订单录入,如果存在,则显示并计算客户所需付款。
    • 编写Init()方法提供从控制台输入购买信息
    • 编写Save()方法保存对象到“Order.bin”
    • 编写Load()方法获得对象,计算客户所需付款

    分析

    提示

    可以使用集合保存对象,然后将集合中所有的对象进行序列化。

    如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时,必须按照写入的顺序读取。

    参考代码



    本博客文章未经许可,禁止转载和商业用途!

    如有疑问,请联系: 2083967667@qq.com


  • 相关阅读:
    经典背景音乐集(转)
    商业模式的思考
    PHP5.4的变化关注What has changed in PHP 5.4.x
    yii模版中的写法
    设计模式(一)工厂模式Factory(创建型)
    yii模版中的判断方法
    Yacc 与 Lex 快速入门(词法分析和语法分析)
    Windows PHP 中 VC6 X86 和 VC9 X86 的区别及 Non Thread Safe 的意思
    金融系列1《借贷记卡介绍》
    设计模式概论
  • 原文地址:https://www.cnblogs.com/rask/p/8254146.html
Copyright © 2011-2022 走看看