I/O(输入/输出)---序列化与反序列化

概念:

  序列化就是将对象的状态存储到特定的介质中的过程,也就是将对象状态转换为可保持或传输格式的过程。

  反序列化则是从特定存储介质中将数据重新构建对象的过程。可以将存储在文件上的对象信息读取,然后重新构建为对象。

过程:

  将对象的公有成员、私有成员包括类名,转换为字节流---》写入数据流---》存储到存储介质中(文件)。

意义:

  将java对象序列化后,可以将其转换为自己序列,这样就可以保存在磁盘上,也可以借助网络进行传输。

  对象的保存是二进制状态,实现了平台的无关性。

import java.io.Serializable;
/*
 * Serializable:用于给被序列化的类加入ID号。
 * 用于判断类和对象是否是同一个版本。
 */
//Person诶实现Serializable接口,代表这个类可被序列化
public class Person implements Serializable/*标记接口*/ {

    /**
     * transient:非静态数据不想被序列化可以使用这个关键字修饰。
     */
    private static final long serialVersionUID = 9527l;
    private transient String name;
    private static int age;

    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;
    }

}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import cn.itcast.io.p2.bean.Person;

public class ObjectStreamDemo {

    /**
     * @param args
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {

//        writeObj();
        readObj();
    }

    public static void readObj() throws IOException, ClassNotFoundException {
        //ObjectInputStream 对象输入流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object"));
        //对象的反序列化。需要类型转换。
        Person p = (Person)ois.readObject();

        System.out.println(p.getName()+":"+p.getAge());

        ois.close();

    }

    public static void writeObj() throws IOException, IOException {
        //ObjectInputStream 对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object"));
        //对象序列化。  被序列化的对象必须实现Serializable接口。
        oos.writeObject(new Person("小强",30));

        oos.close();

    }

}
时间: 2024-12-15 20:01:10

I/O(输入/输出)---序列化与反序列化的相关文章

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

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

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

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

HeadFirstJava——12_序列化和文件的输入/输出

存储对象状态的方式: 1 序列化(若只有自己写的程序会用到这些数据) 创建一个文件,将被序列化的对象写入文件中,之后可在程序中到文件中读取序列化的对象并将其转换为状态: 注意:以文本文件形式阅读是无意义的: 2 写入纯文本文件中(若数据需要被其他程序引用) 创建一个文本文件,用其他程序可以解析的特殊字符写到文件中,每行写入一个对象的状态,用逗号/制表符分隔: 一.序列化 1 将序列化对象写入文件中 a 创建FileOutputStream 若MyGame.ser文件不存在,则自动被创建: 创建存

java 的序列化和反序列化的问题

引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写.然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识. 回页首 文章结构 本

Json的序列化与反序列化

想想某一天,你在看LOL攻略的时候,系统突然崩溃了,接着浏览器出现了密密麻麻的LOL帐号和密码,你一定在想:"天啊,这次要发财了,说不定里面有超凡号或者王者号,我得赶紧全部记下来."然而说完你就惊呆了,那么多的帐号密码,而且全部写在了Json里面,一个一个复制粘贴要记到什么时候啊...如果这时候我在你身边,我一定会帮助你的,前提是,要分几个王者号给我噢...  言归正传. 上面举的例子虽然有点不太现实,但其实是想和大家说明一个问题,如果要解析Json或XML,请不要使用检索字符串的方式

Java——IO输入/输出

在学习输入/输出流的前提下先了解一下File类. 使用 File 类操作文件 import java.io.File; import java.io.IOException; public class FIleTest { public static void main(String[] args) { //创建File 类对象 File file = new File("files/file"); //创建文件夹,并且只能创建一级文件夹 //System.out.println(fi

I/O(输入/输出)

1.创建引用ObjectInputStream ois =null; ObjectOutputStream oos = null; ByteArrayInputStream bais = null; ByteArrayOutputStream baos = null; 2.引用指向实例对象 baos = new ByteArrayOutputStream(); 3.i/o输入/输出使用try{}catch(){ }最后注意:关闭输入输出流4.几个输入输出重要的方法write();read();c

第15章.输入/输出

File类: 访问文件和目录: File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径.默认情况下,系统总是依据用户的工作路径来解释相对路径,这 个路径由系统属性"user.dir"指定,通常也就是运行Java虚拟机时所在的路径. File类提供了很多方法来操作文件和目录: 访问文件名相关的方法: 1.String getName():返回此File对象所表示的文件名或路径名(若是路径,则返回最后一级子路径名). 2.String get

利用反射实现序列化和反序列化

主程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization; using System.Diagnost