java 对象输入输出流


          对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息。 对象的持久化。 比如:用户信息。
   
           ObjectInputStream   : 对象输入流
   
           ObjectOutPutStream  :对象输出流  
   
         对象输入输出出流的使用注意点:
       1.如果想将一个对象写入到磁盘中,那么对象所属的类必须要进行序列化实现Serializable接口,Serializable接口没有任何方法 ,是一个标记接口
       2.如果对象所属的类的成员变量发生改变,你在读取原来的对象是就会报错,如果想要解决报错,保证serialVersionUID是唯一。
       3.如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量
       4.如果一个类中引用了另外的一个类,那么另外的这个类也要实现Serializable接口。

package com.beiwo.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.io.Serializable;



class Cat implements Serializable {
    
    private static final long serialVersionUID = 1L; // 保证所取对象信息唯一
    
    String name;
    public Cat(String name) {
        // TODO 自动生成的构造函数存根
        this.name = name;
    }
    
    @Override
    public String toString() {
        // TODO 自动生成的方法存根
        return "cat.name" + this.name;
    }
}

class Person implements Serializable {
    
    private static final long serialVersionUID = 1L; // 保证所取信息唯一
    
    String name;
    int age;
    int id;
    String sex;
    // 如果不想把某些信息存入磁盘中 ,则需要通过transient关键字修饰成员变量
    transient String password; 
    Cat cat;
    // 构造方法
    public Person(String name, int age, int id, String password, Cat cat){
        this.name = name;
        this.age = age;
        this.id = id;
        this.password = password;
        this.cat = cat;
    }
}
public class demo4 {

    /**
     * @param args
     * @throws IOException 
     * @throws ClassNotFoundException 
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 调用方法
        writeObject();
        readObject();
    }
    // 读取数据到磁盘中
    public static void readObject() throws IOException, ClassNotFoundException {
        // TODO 自动生成的方法存根
        // 找到目标文件
        File file = new File("C:\Users\cdlx2016\Desktop\2\cc.txt");
        // 建立通道
        FileInputStream inputStream = new FileInputStream(file);
        // 创建对象输入流
        ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
        // 读取数据
        Person person = (Person)objectInputStream.readObject();
        
        // 打印数据
        System.out.println("name: " + person.name + " age: " + person.age + " id: " + person.id + " 密码:" + person.password + " cat: " + person.cat);
        
        // 关闭数据
        objectInputStream.close();
        
    }
    
    // 写入对象
    private static void writeObject() throws IOException {
        // 找到目标文件
        File file = new File("C:\Users\cdlx2016\Desktop\2\cc.txt");
        // 建立通道
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        // 创建对象输出流
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
        // 创建对象
        Person person = new Person("李四", 20, 1203, "369852", new Cat("大肥"));
        // 写入数据
        objectOutputStream.writeObject(person);
        // 关闭流
        objectOutputStream.close();
        
    }

}
原文地址:https://www.cnblogs.com/Liang-Haishan216/p/6148946.html