对象流: 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;
    }
}

时间: 2024-11-02 10:26:54

对象流: ObjectInputStream 和 ObjectOutputStream的相关文章

javaIO中的对象流ObjectInputStream与ObjectOutputStream

ObjectInputStream与ObjectOutputStream可以将对象写在硬盘或者从硬盘中读取出来,当然也可以在网络中传输的时候.但是操作的对象必须实现序列化. 什么是对象的序列化?对象序列化的目标就是将对象保存在磁盘上,或者允许在网络中传输对象. api中描述如下 api中的描述如下 一个实现了序列化的对象 package cn.bean.demo.io.object; import java.io.Serializable; //如果这个对象拥有一个实例属性[并且这个实例的对象是

Java 对象流(输入-输出)objectoutputstream序列化报错

报错:java.io.notserializableexception 解决方法:添加下面代码实现 对象类 1 package com.etc._07ObjectDemo; 2 3 import java.io.Serializable; 4 5 public class Person implements Serializable { 6 private int id; 7 private String name; 8 private String sex; 9 public int getI

Java之IO(七)ObjectInputStream和ObjectOutputStream

转载请注明源出处:http://www.cnblogs.com/lighten/p/7003536.html 1.前言 本章介绍Java字节流中重要的成员,对象流ObjectInputStream和ObjectOutputStream.之前的DataInputStream和DataOutputStream只是对一些基本数据类型进行了解析和储存,但是在Java中更常见的是一个对象实例,一个对象实例是十分复杂的,如何保存一个对象呢?这个就是对象流的作用了.对象流最终是要有归属地的,通常也就是文件流.

Java IO7:管道流、对象流

前言 前面的文章主要讲了文件字符输入流FileWriter.文件字符输出流FileReader.文件字节输出流FileOutputStream.文件字节输入流FileInputStream,这些都是常见的流类.当然除了这些流类之外,Java还提供了很多的流类给用户使用,本文就看一下别的流. 管道流 管道流主要用于连接两个线程的通信.管道流也分为字节流(PipedInputStream.PipedOutputStream)和字符流(PipedReader.PipedWriter).比如一个Pipe

Java IO5:管道流、对象流

前言 前面的文章主要讲了文件字符输入流FileWriter.文件字符输出流FileReader.文件字节输出流FileOutputStream.文件字节输入流FileInputStream,这些都是常见的流类.当然除了这些流类之外,Java还提供了很多的流类给用户使用,本文就看一下别的流. 管道流 管道流主要用于连接两个线程的通信.管道流也分为字节流(PipedInputStream.PipedOutputStream)和字符流(PipedReader.PipedWriter).比如一个Pipe

对象流的使用(ObjectInputStream和ObjectOutputStream)

1.在RPC中调用可能会使用对象流的二进制方式来对象的获取和使用 Person对象: import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private Long id; public Person() { super(); } public Person(St

(JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  ObjectInputStream 使用: 对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程.既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接

ObjectInputStream与ObjectOutputStream类实现对象的存取

1. ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 2. Serializable是个对象序列化接口,只有序列化才能实现对象存取 3. //定义学生类 package job; import java.io.Serializable;import java.util.Set; public class Student implements Seria

对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  ObjectInputStream 使用: 对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程.既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接