Java IO学习总结(三)

一、对象序列化

序列化就是把内存中的java对象转换成与平台无关的二进制流,从而把这种二进制流保存在磁盘,或者通过网络传输到另一个网络节点;一旦获取到这个二进制流也可以恢复成Java对象。序列化可以使对象脱离程序的运行而独立存在。

Java对象序列化,则该类必须实现Serializable接口或者Externalizable接口。

示例代码

public class SerializableTest {
    public static void main(String[] args) {
        try {
            // 序列化
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\\demo.txt"));
            Demo demo = new Demo(18, "test");
            oos.writeObject(demo);

            // 反序列化
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\\demo.txt"));
            Demo de = (Demo)ois.readObject();
            System.out.println("age:" + de.getAge() + ";name:" + de.getName());
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

public class Demo implements Serializable{
    private int age;
    private String name;

    public Demo(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

二、对象引用序列化

Java序列化对象时,引用的对象也必须实现Serializable接口,Java序列化机制是:所以保存在磁盘的对象都有一个序列化编号,当程序视图序列化一个对象时,首先检查该对象是否被序列化,如果已经被序列化,程序则直接输出一个序列化编号,否则进行序列化。

示例代码

public class SerializableTest {
    public static void main(String[] args) {
        try {
            // 序列化
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\\demo.txt"));
            Demo demo = new Demo(18, "test");
            Demo1 demo1 = new Demo1("test1",demo);
            Demo1 demo2 = new Demo1("test2",demo);
            oos.writeObject(demo);
            oos.writeObject(demo1);
            oos.writeObject(demo2);
            oos.writeObject(demo1);

            // 反序列化
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\\demo.txt"));
            Demo de = (Demo)ois.readObject();
            Demo1 de1 = (Demo1)ois.readObject();
            Demo1 de2 = (Demo1)ois.readObject();
            Demo1 de3 = (Demo1)ois.readObject();
            System.out.println(de==de1.getDemo());
            System.out.println(de==de2.getDemo());
            System.out.println(de1==de3);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

public class Demo1 implements Serializable{
    private String name;
    private Demo demo;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Demo getDemo() {
        return demo;
    }
    public void setDemo(Demo demo) {
        this.demo = demo;
    }
    public Demo1(String name, Demo demo) {
        super();
        this.name = name;
        this.demo = demo;
    }

}

结果是:

true
true
true
时间: 2024-10-24 13:17:07

Java IO学习总结(三)的相关文章

Java IO学习笔记:概念与原理

Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了流,然后将这些流还可以写到另外的目的地(文件.内存.控制台.网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分. 二.分类 流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕.流分类的方式很多: 1.按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序. 2.

Java IO学习笔记(三)转换流、数据流、字节数组流

转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和BufferedWriter,并使用它们的readLine 和 newLine方法. 2.有两种转换流:InputStreamReader.OutputStreamWriter 练习小程序1: package test.io.transfer; import java.io.FileOutputSt

Java IO学习--(三)通道

Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为数据源以及目标媒介. 你不能利用管道与不同的JVM中的线程通信(不同的进程).在概念上,Java的管道不同于Unix/Linux系统中的管道.在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信.在Java中,通信的双方应该是运行在同一进程中的不同线程. 通过Java IO创建管道 可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道.一个

Java IO学习总结

Java IO流学习总结 Io流的内容比较多 ,大致可以分为字节流和字符流,其中为了提高效率又用到了缓冲区. Java流操作有关的类或接口: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进

Java IO学习笔记(五)对象流

1.Object流:直接将Object写入或读出. 2.序列化:将Object直接转化成字节流写到硬盘或网络上. 3.如果想把一个对象转化成字节流,该对象的实体类必须得实现Serializable接口,Serializable接口是标记性接口,它并没有任何方法,只是用于标识该类可以被序列化. 4.transient关键字,用于修饰成员变量,表示该成员变量是透明的,与Serializable接口同用,表示序列化的时候不考虑该成员变量.序列化时存的是该成员变量数据类型的默认值. 5.External

Java IO 学习总结 学习手册总结

Java IO 是一套Java用来读写数据(输入和输出)的API.大部分程序都要处理一些输入,并由输入产生一些输出.Java为此提供了java.io包. 代码 github地址:https://github.com/loveincode/StudyTest/tree/master/src/IO Java.io 包的范围 java.io 包并没有涵盖所有输入输出类型.例如,并不包含GUI或者网页上的输入输出,这些输入和输出在其它地方都涉及,比如Swing工程中的JFC (Java Foundati

Java IO学习笔记(四)打印流

1.只有输出流才有打印流:PrintWriter和PrintStream分别针对字符和字节,提供了重载的print,Println方法用于多种数据类型的输出.PrintWriter和PrintStream操作不会抛出异常,数据没打印出来也不会抛异常. 2.System.out.print(Object object)调用的是Object实体类的toString()方法. 3.PrintWriter和PrintStream有自动的flush功能,不需要手动调用flush方法.*这里必须强调一点:P

java io学习之File类

1.先看下四个静态变量 static String pathSeparator The system-dependent path-separator character, represented as a string for convenience. static char pathSeparatorChar The system-dependent path-separator character. static String separator The system-dependent

Java IO学习笔记:File类

File类 在整个IO包了,唯一表示与文件本身有关的类就是File类.使用File类可以进行1创建或删除文件等常用操作.要想使用File类.则首先要观察File类的构造方法,此类的      常用构造方法如下所示:public File(String pathname) 实例化File类的时候,必须设置好路径 No. 方法或常量 类型 描述 1 public static final String pathSeparator 常量 表示路径的分隔符(windows是“;”) 2 public s

Java IO学习笔记(一)

一.概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.在两设备间的传输的数据称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,以进行数据操作. 二.流分类 数据类型:字符流和字节流 流方向:输入流和输出流 字节流和字符流区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节. 处理对象不同:字节流能处理所有类型的数据(如图片.rmvb等),字符流只能处理字符类型的数据. 处理纯文本数据,优先使用字符流,此