码迷,mamicode.com
首页 > 编程语言 > 详细

java对象流与序列化

时间:2017-05-31 12:08:42      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:ade   public   ado   input   main   tput   输出流   方法   等等   

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 = "小洋仔";
}

 

java对象流与序列化

标签:ade   public   ado   input   main   tput   输出流   方法   等等   

原文地址:http://www.cnblogs.com/lihaoyang/p/6922846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!