对象流: 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();
            }
        }
    }
View Code

 

技术分享
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;
    }
}
View Code

 

以上是关于对象流: ObjectInputStream 和 ObjectOutputStream的主要内容,如果未能解决你的问题,请参考以下文章

大数据必学Java基础(七十四):对象流ObjectInputStream和ObjectOutputStream介绍

对象流的序列化与反序列化:ObjectInputStream 和 ObjectOutputStream

ObjectInputStream || ObjectOutputStream 序列化对象输入输出流Demo 学习

转:ObjectInputStream类和ObjectInputStream类的使用

ObjectOutputStream&ObjectInputStream--对象流

javaIO中的对象流ObjectInputStream与ObjectOutputStream