学习要点

  • 定义
  • 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()方法获得对象,计算客户所需付款

分析

提示

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

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

参考代码

JavaSE-20 IO序列化的更多相关文章

  1. linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties

      Day12 IO  序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...

  2. 20.IO流部分笔记

    20.IO流部分笔记 2018/09/06 1.IO流  1.1 创建字节输出流对象,如果没有就自动创建一个 FileOutputStram fos = new FileOutputStram(&qu ...

  3. Java IO: 序列化与ObjectInputStream、ObjectOutputStream

    作者:Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和O ...

  4. JAVA IO 序列化与设计模式

    ➠更多技术干货请戳:听云博客 序列化 什么是序列化 序列化:保存对象的状态 反序列化:读取保存对象的状态 序列化和序列化是Java提供的一种保存恢复对象状态的机制 序列化有什么用 将数据保存到文件或数 ...

  5. 08 - JavaSE之IO流

    IO流 JAVA流式输入输出原理:可以想象成一根管道怼到文件上,另一端是我们程序,然后流的输入输出都是按照程序本身作为第一人称说明的.比如 input,对于我们程序来说就是有数据输入我们程序,outp ...

  6. 基于Java IO 序列化方案的memcached-session-manager多memcached节点配置

    在公司项目里想要在前端通过nginx将请求负载均衡,而后台的几组tomcat的session通过memcached(non-sticky模式)进行统一管理,这几组tomcat部署的web app是同一 ...

  7. IO/序列化/JSON

    一.读写文件 1.open:打开文件 open(path, mode, encoding='xxx', errors='ignore') mode取值:rU 或 Ua 以读方式打开, 同时提供通用换行 ...

  8. IO、IO序列化

    文件:文件可认为是相关记录或放在一起的数据的集合.文件一般保存在硬盘.U盘.光盘.云盘的媒介中. JAVA API:java.io.File类可操作文件 File对象的构建 File file=new ...

  9. 【JavaSE】IO(1)-- File类

    File类 2019-07-01  22:41:42  by冲冲 在 Java 中,File 类是 java.io 包中唯一映射磁盘文件本身的对象.File类可以获取文件的相关信息(查看文件名.路径. ...

随机推荐

  1. C++ 多线程与并发

    1. 非原子操作 这些非原子操作在被编译为汇编代码后不止一条指令. 自加.自减少: new 关键字: 申请内存: 调用构造函数: pInst = new T; // 对于这样一个赋值语句,更是包含了如 ...

  2. I.MX6 PLL5 clock hakcing

    /************************************************************************** * I.MX6 PLL5 clock hakci ...

  3. 【HDU 1520】 Anniversary Party

    [题目链接] 点击打开链接 [算法] 树形DP 令f[i][0]表示 : 以i为根的子树中,若i不参加宴会,所能获得的最大愉悦值 f[i][1]表示 : 以i为根的子树中,若i参加宴会,所能获得的最大 ...

  4. Django Cache缓存系统介绍及Memcached使用

    在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了. 缓存就是为了 ...

  5. python解决list unicode转中文显示

    #!/usr/bin/python# #-*-coding:UTF-8-*- import xlrd book = xlrd.open_workbook('Interface_data.xlsx') ...

  6. artemplate include

    include用于嵌入字模板 {{include 'template_name'}} 子模板 默认共享当前的数据 也可以自己指定数据 {{include 'template_name' templat ...

  7. HDU 5944 Fxx and string (暴力)

    题意:给定一个字符串,问有多少个三元组满足 i, j, k组成一个等比数列,并且s[i] = 'y', s[j] = 'r', s[k] = 'x',且j/i ,j/k中至少一个是整数. 析:直接暴力 ...

  8. Rebel 6 破解版及使用方法

    下载地址:http://www.zeroturnaround.com/jrebel/download/     下载下来的是一个Zip压缩包,打开之后会发现一个jrebel.jar,这就是其最重要的运 ...

  9. 洛谷 P3825 [NOI2017]游戏 【2-SAT+状压】

    UOJ和洛谷上能A,bzoj 8ms即WA,现在也不是知道为啥--因为我太弱了 先看数据范围发现d非常小,自然想到了状压. 所以先假装都是只能跑两种车的,这显然就是个2-SAT问题了:对于x场没有hx ...

  10. 洛谷P4891 序列

    传送门 这题纯暴力竟然能过…… //minamoto #include<cstdio> #include<iostream> #define mul(a,b) (1ll*a*b ...