ObjectOutputStream&ObjectInputStream--对象流

用于操作对象的流对象,对象的序列化
ObjectInputStream ObjectOutputStream
特点:用于操作对象。
解决的问题:将对象持久化到硬盘
功能:特有:writeObject();

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;

public class ObjectStreamDemo {

    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        /*
         * 将一个对象存储到持久化设备上
         */

        writeObj();//对象的序列化

//        readObj();//对象的反序列化

    }

    public static void readObj() throws IOException, ClassNotFoundException {

        //1.定义流对象关联存储了对象的文件。
        FileInputStream fis = new FileInputStream("tempfile\\obj.object");

        //2.建立用于读取对象的功能对象
        ObjectInputStream ois = new ObjectInputStream(fis);

        Person obj = (Person)ois.readObject();

        System.out.println(obj.toString());

    }

    public static void writeObj() throws IOException {

        //1.明确存储对象的文件
        FileOutputStream fos = new FileOutputStream("tempfile\\obj.object",true);

        //2.给操作文件对象加入写对象的功能。
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        //3.调用了写入对象的方法。

        oos.writeObject(new Person("wangcai",20));
        oos.write(LINE_SEPARATOR.getBytes());//换个行

        //4.关闭资源
        oos.close();

    }

}
import java.io.Serializable;

/*
 * Person类的对象如果需要序列化,就需要实现Serializable标记接口
 * 该接口给需要序列化的类,提供了一个序列版本号,serialVersionUID
 * 该版本号的目的在于验证序列化的对象和对应的类是否版本匹配。
 */

public class Person implements Serializable{
    /**
     * 给类显示声明一个序列版本号
     */
    private static final long serialVersionUID = 1L;
    private String name;    //数字签名:private,public...
    private transient/*瞬态关键字*/ int age;//防止数据被序列化
    public Person() {
        super();
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    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 + "]";
    }

}
时间: 2024-10-06 12:41:26

ObjectOutputStream&ObjectInputStream--对象流的相关文章

对象流: ObjectInputStream 和 ObjectOutputStream

/* * 1.对象流: ObjectInputStream 和 ObjectOutputStream 一对. * 1) ObjectInputStream 对象的字节输入流类, ObjectOutputStream对象的字节输出流类. * 2) 功能: 实现对象的输入/输出. (存储到文件中的是对象,从相应的文件中读取的还是对象) * 3) 注意: 对象流属于处理流,因此,使用时必须将它套接在节点流上. * * 4) 要实现对象的存盘和读取必须具备什么条件? * a) 对象对应的类必须实现一个接

对象流的使用(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 IO7:管道流、对象流

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

java对象流

当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再恢复为Java对象. 把Java对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为Java对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. java.io.ObjectOutp

对象流

对象流: 对象进行序列化(解释一): 所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值(字节序列)再生成相同状态的对象. 对象序列化(解释二):        当需要传输对象时,由于对象是很多属性和行为的封装,数据量很庞大.所以在传输对象之前需要将对象打散成字节序列,以利于传输,这个过程 称为序列化过程.到达目的地以后,又需要将字节序列还原成对象,这个过程称为反序列化过程. 如何实现序列化:       将需要传输的类,实现java.io.Serializable.这意味着该类的对

Java IO详解(六)------序列化与反序列化(对象流)

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html Java IO 字节输入输出流:http://www.cnblogs.com/ysocean/p/6854541.html Java IO 字符输入输出流:https://i.cnblogs.com/EditPosts.aspx?postid=6859242 Jav

【幻化万千戏红尘】qianfengDay19-java基础学习:转换流、对象流、打印流、三大标准(重定向)

课程回顾: 流:数据通信的管道常用的流类:1.文件流:File:数据在文件中 1.FileInputStream 2.FileOutputStream 3.FileReader 4.FileWriter2.内存流:ByteArray:数据在内存中(数组) 1.ByteArrayInputStream 2.ByteArrayOutputStream3.缓冲流:Buffered:提高读写效率 1.BufferedInputStream 2.BufferedOutputStream 3.Buffere

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对象序列化 当需要存储相同类型的数据,选择固定的长度记录是好选择.但是在面向对象(OOP)程序中,对象之间很少有全部相同的类型.所以,java语言支持一种称为对象序列化(object serialization)的机制. 下面展示一个序列化例子,关于两个对象 Em

Java序列化与对象流浅谈

今晚又重新回顾了Java中序列化与对象流的知识,接触了一位有着上亿行有效代码量的大佬之思想,2333. 1.序列化与反序列化 Java中的序列化简而言之就是为了避免要重复使用的实例在每次执行程序过程中都要重新申请堆空间,序列化后直接加载,节约时间.序列化过程中,保存在文件中的对象只记录了对象的状态(属性),包括成员和类类型(名称),而不会存储对象的方法.可看做将一个有着灵魂的人进行灵魂转移,转移的只是他的记忆,他自己的各种行为,比如吃饭.睡觉--,每个人都拥有,且行为表现一样,即只需转移(保存)

Java文件与io——打印流和对象流

打印流的主要功能是用于输出,在整个IO包中打印流分为两种类型: 字节打印流:PrintStream 字符打印流:PrintWriter 打印流可以很方便的进行输出 public class PrintStreamDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub byteStreamOut(); charStreamOut(); } //Pr