• java对象流与序列化


    Object流,直接把obj写入或读出.

    前言:

    比如 画图的程序,咣当画一个三角形出来,咣当画一正方形出来。然后存盘,当你下次再打开软件的时候三角形、方块还在原来的位置上。如果用面向对象的思维,三角形,方块都有自己的成员变量,x、y坐标、颜色、线的颜色、粗细等,你存盘的时候要把这些内容写到硬盘上,写到文件里,这叫存盘。比如说一个方块,你存盘的时候只要把起始点的坐标,宽度,高度颜色等等存进去,当再显示的时候再在原处把它画出来。

    序列化:把一个object直接转换成字节流写到硬盘上或者写到网络上。

    实际在内存中会new出方块的一个对象来,有它各种的属性,存盘的时候要挨着把这些属性都给存到文件里,用DataOutputStream就可以实现,不管它的属性是int,dubbo等。既然把这个object的内容都要写到硬盘上,何不把整个object全部写进去呢,因为把object  new出来的时候无非也就是内存里的一块区域,也就是一个字节一个字节的,干脆把整个字节,这一小块内存全都写进硬盘,更合适,更方便,这就是object的初衷。当然New出来的对象除了自己的属性外,还有标识object的版本号,this、super指针,相关的内容都会写进去。这就是object流的作用。这就是序列化。

    java.io.Serializable:

    可序列化的。如果想吧一个类的对象写到硬盘上或者网络上,想把它序列化成一个字节流,必须实现序列化接口。

    可序列化类的所有子类型本身都是可序列化的。

    没有方法,标记性的接口,给编译器看的,编译器看到这个接口后就知道这个类能被序列化。

    例子程序:

    package lhy.io;
    
    
    import java.io.*;
    
    public class TestObjectIO {
        public static void main(String args[]) throws Exception {
            T t = new T();
            t.k = 8;
            //写对象,.dat保存数据的文件
            //文件输出流
            FileOutputStream fos = new FileOutputStream("d:/share/testobjectio.dat");
            //套一层对象输出流
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            //写对象
            oos.writeObject(t);
            oos.flush();
            oos.close();
            
            //读取
            FileInputStream fis = new FileInputStream("d:/share/testobjectio.dat");
            ObjectInputStream ois = new ObjectInputStream(fis);
            //读一个Object
            T tReaded = (T)ois.readObject();
            //10  9  2.3  0   小洋仔,transient标识的成员变量k,不能被序列化,是int默认值0
            System.out.println(tReaded.i + " " + tReaded.j + " " 
                        + tReaded.d + " " + tReaded.k+" "+tReaded.str);
            
        }
    }
    /**
     * 实现序列化接口
     */
    class T implements Serializable
    {
        int i = 10;
        int j = 9;
        double d = 2.3;
        //transient:透明的,序列化的时候不予考虑
        transient int k = 15;
        String str = "小洋仔";
    }
  • 相关阅读:
    2021年欺骗式防御技术将迎来爆发
    可以简化决策过程的10个大数据源
    “AI+”改变世界!不同领域的5大人工智能趋势
    预测2021: 区块链领域新景观
    后量子时代的密码学
    考试
    进度总结8
    进度总结7
    进度总结6
    进度总结5
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/6922846.html
Copyright © 2020-2023  润新知