对象流(ObjectOutputStream 和 ObjectInputStream)

1 . 对象流操作的是文件字节流,也就是说new对象流的对象时,构造方法中的参数是一个文件字节流对象.

想要将对象持久化的存储下来, 需要通过对象流写
2 . 首先,类要实现Serializable接口.是为了可序列化.
序列化 : 可以将对象转成字节 (序列化的作用:将对象转成 字节一会 就可以支持 本地存储, 或者 通过网络传递)
反序列化: 将字节转成对象(作用:序列化的作用:将对象转成字节 , 就可以支持 本地存储, 或者 通过网络传递)

3 . 步骤: * 如果想要对象流存储对象
* 1 让类 实现 序列化的接口
* 2 创建对象
* 3 让对象流存储
* 4 创建对象输入流对象
* 5 readObject

package com.qf.demo4;

import java.io.Serializable;

/**
 * 想要序列化这个类    Serializable
 * @author Administrator
 *
 */
public class Person implements Serializable{

    private String name;
    private int  age;
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Person() {
        super();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

3 . 将对象保存到文件中时会乱码,是正常的,不用处理.
但从文件读取对象时,读出来的对象数据不是乱码.
main方法:

package com.qf.demo4;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * 对象流 : 
 *      读和写对象
 * 
 * 想要将对象持久化的存储下来, 需要通过对象流写
 * 
 * 
 * 序列化 :   可以将对象 转成字节
 * 反序列化:  将字节转成对象
 * 
 * 序列化的作用:
 *      将对象转成 字节一会  就可以支持  本地存储, 或者  通过网络传递
 * 
 * 
 * 持久化存储
 * 
 * 
 * 如果想要对象流存储对象
 * 1 让类 实现 序列化的接口
 * 2 创建对象
 * 3 让对象流存储
 * 
 * 4 创建对象输入流对象
 * 5 readObject 
 * 
 * 
 */
public class Test {

    public static void main(String[] args) {
        Person person = new Person("小明", 5);
        // 没有别序列化的对象不能存到对象流中  会报异常   NotSerializableException
//      Test test = new Test();

        Person person2 = new Person("小红", 5);
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        try {
             oos = new ObjectOutputStream(new FileOutputStream(new File("persons.txt")));
            oos.writeObject(person);
            oos.writeObject(person2);
            oos.flush();


            // 想要取出来     读取来 用 InputSteam
            // readObject 在读取的过程中  按照存入顺序读取的
             ois = new ObjectInputStream(new FileInputStream(new File("persons.txt")));
             //向下转型
            Person person3= (Person)ois.readObject();
            System.out.println(person3);

            Person person4 = (Person) ois.readObject();
            System.out.println(person4);


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值