对象流: ObjectInputStream 和 ObjectOutputStream
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象流: ObjectInputStream 和 ObjectOutputStream相关的知识,希望对你有一定的参考价值。
/*
* 1、对象流: ObjectInputStream 和 ObjectOutputStream 一对。
* 1) ObjectInputStream 对象的字节输入流类, ObjectOutputStream对象的字节输出流类。
* 2) 功能: 实现对象的输入/输出。 (存储到文件中的是对象,从相应的文件中读取的还是对象)
* 3) 注意: 对象流属于处理流,因此,使用时必须将它套接在节点流上。
*
* 4) 要实现对象的存盘和读取必须具备什么条件?
* a) 对象对应的类必须实现一个接口: Serializable; 目的是实现对象的序列化(串行化)。
*
* b) 构建 ObjectOutputStream 和 ObjectInputStream类的对象。
*
* c) 通过对象流的方法实现对象的存储和读取。
* writeObject();
* readObject();
*
*/
public static void main(String[] args) { //1 准备 Person p1 = new Person("张三", true, 21 ); Person p2 = new Person("李四", false, 20 ); Person p3 = new Person("王二", false, 19 ); String path = "d:/objects.dat"; //2 声明 ObjectOutputStream oos = null; ObjectInputStream ois = null; //3 创建 try { oos = new ObjectOutputStream( new FileOutputStream( path) ); ois = new ObjectInputStream( new FileInputStream( path) ); //4 存盘 oos.writeObject( p1 ); oos.writeObject( p2 ); oos.writeObject( p3 ); //5 确保存盘成功 oos.flush(); System.out.println("\\n已将对象存盘到 " + path + " 文件中了。"); //6 读取对象 Object obj = ois.readObject(); p1 = (Person) obj; System.out.println( "p1>>> " + p1 ); System.out.println("p1,你帮我做一道算术题,行吗?"); System.out.println("没有问题,把数据给我就行了。"); System.out.println("算术题完成如下:"); int a = (int)(2331 * Math.random()); int b = (int)(989 * Math.random()); int re = p1.add(a, b); System.out.println( re ); obj = ois.readObject(); p1 = (Person) obj; System.out.println( ">>> " + p1 ); obj = ois.readObject(); p1 = (Person) obj; System.out.println( ">>>" + p1 ); } catch (FileNotFoundException e) { } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { } finally { try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.bjsxt.d821; import java.io.Serializable; public class Person implements Serializable { //实现该接口,从而让它的对象完成序列化(串行化)。 private String name; private boolean sex; private int age; public Person() { } public Person(String name, boolean sex, int age) { this.name = name; this.sex = sex; this.age = age; } // // @Override public String toString() { return "姓名: " + name + " 性别: " + (sex ? "男":"女") + " 年龄: " + age; } public int add( int x, int y ){ System.out.printf("%d + %d = " , x , y ); return x + y; } }
以上是关于对象流: ObjectInputStream 和 ObjectOutputStream的主要内容,如果未能解决你的问题,请参考以下文章
大数据必学Java基础(七十四):对象流ObjectInputStream和ObjectOutputStream介绍
对象流的序列化与反序列化:ObjectInputStream 和 ObjectOutputStream
ObjectInputStream || ObjectOutputStream 序列化对象输入输出流Demo 学习
转:ObjectInputStream类和ObjectInputStream类的使用