ObjectOutputStram类用于将Java对象的原始数据类型和图形存储到输出流,而ObjectInputStream类用于从输入流中读取Java对象的原始数据类型和图形。

注 - 只有那些类实现java.io.Serializable接口的对象才能被写入流。

下面是一个演示ObjectOutputStramObjectInputStream的示例。

文件:User.java -

package com.yiibai.tutorial.io;

import java.io.Serializable;

/**
 * @author yiibai 
 */
public class User implements Serializable {

    private static final long serialVersionUID = -3389363800876569458L;
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "ID="+this.id+" NAME="+this.name;
    }
}

在上面的示例中,User类实现了Serializable接口,现在我们可以将其对象存储到输出流中。

文件:ObjectInputOutputStreamExample.java -

package com.yiibai.tutorial.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;

/**
 * @author yiibai
 */
public class ObjectInputOutputStreamExample {
    public static void main(String[] args) {
        File file = new File("file.txt");

        /* Write object and primitive data type to output stream */
        FileOutputStream fileOutputStream = null;
        ObjectOutputStream outputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            outputStream = new ObjectOutputStream(fileOutputStream);
            // Write int value
            outputStream.writeInt(500);
            // Write date
            outputStream.writeObject(new Date());
            // Write User object
            outputStream.writeObject(new User(1, "yiibai"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        /* Read object and primitive data type from input stream */
        FileInputStream fileInputStream = null;
        ObjectInputStream objectInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            objectInputStream = new ObjectInputStream(fileInputStream);
            // Read int
            int value = objectInputStream.readInt();
            System.out.println(value);
            // Read date
            Date date = (Date) objectInputStream.readObject();
            System.out.println(date);
            // Read User object
            User user = (User) objectInputStream.readObject();
            System.out.println(user);

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
                if (objectInputStream != null) {
                    objectInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

执行上面示例代码,得到以下结果:

500
Sun Nov 06 10:21:52 IST 2016
ID=1 NAME=yiibai