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对象流与序列化的更多相关文章

  1. Java对象流与序列化学习

    对象流与序列化 对象流有两个类 ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutp ...

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

    摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对 ...

  3. java --对象流与对象的序列化

    对象流 ObjectInputStream ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object ob ...

  4. Java基础IO类之对象流与序列化

    对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...

  5. Java对象的XML序列化(转)

    转自:http://westlifesz.javaeye.com/blog/48618 java.io.Serializable引发的问题——什么是序列化?在什么情况下将类序列化?  序列化就是一种用 ...

  6. Java对象流的使用

    为了让对象持久化(把对象存储到本地),可以使用java的对象流处理对象,把对象的内容写到本地存储的文件中,也可以从本地文件中读取出来.也就是常说的序列化和反序列化 主要用到了ObjectInputSt ...

  7. Java对象的serialVersion序列化和反序列化

    Java基础学习总结——Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种 ...

  8. java对象流(一)

    注意:字节数组流是可以不用关闭的(字符数组流要不要关闭暂时不清楚). 对象流的读数据和写数据方法分别是writeObject(Object o)和readObject(Object o). Objec ...

  9. java对象流(二)

    对象流,可以将java中的对象转为字节进行输出.将对象写入文件时.文件输出流是将字节写入到文件中. 对象流是将给定的对象转化为一组字节.writeObject()方法就是将对象转为字节. 对象流,读的 ...

随机推荐

  1. SPSS—回归—二元Logistic回归案例分析

    数据分析真不是一门省油的灯,搞的人晕头转向,而且涉及到很多复杂的计算,还是书读少了,小学毕业的我,真是死了不少脑细胞, 学习二元Logistic回归有一段时间了,今天跟大家分享一下学习心得,希望多指教 ...

  2. 如何使用Java执行cmd命令

    用JAVA代码实现执行CMD命令的方法! Runtime rt = Runtime.getRuntime(); Process p = rt.exec(String[] cmdarray);     ...

  3. 基于zookeeper的主备切换方法

    继承CZookeeperHelper即可快速实现主备切换: https://github.com/eyjian/libmooon/blob/master/include/mooon/net/zooke ...

  4. 使用ASI传递post表单..参数是数组

    你可以使用addPostValue方法来发送相同name的多个数据(梦维:服务端会以数组方式呈现): ASIFormDataRequest *request = [ASIFormDataRequest ...

  5. 系统目录APK更新——权限问题

    package com.example.wx; import java.io.File;import java.io.FileOutputStream;import java.io.IOExcepti ...

  6. java web前端调试手段

    1.console.log() 2. jQuery.ajax({                     url:"/task1/com/guodiantong/servlet/JsonTo ...

  7. C++互斥器:Semaphores

    类似于Mutex,但信号量Semaphores不仅仅是锁和解锁那么简单,更高级的是,可以被锁住最多n次. 其中这个n是信号量被产生时指定的n.该值常常被用来代表“可以锁定住一份资源”的线程个数. 可以 ...

  8. GitLab使用自定义端口

      Git支持两种地址访问方式,一种是:使用ssh协议,另一种是:使用http协议.   今天在部署Git服务器拉取和上传代码是出现了以下问题ssh: connect to host gitlab.d ...

  9. Android 实现界面(Activity)的跳转

    界面跳转 如,我想重一个界面A跳转到界面B,可以用,setContentView(R.layout.activity_login); 但是他其实只是将改界面铺在了最顶层,而按menu这些菜单其实还是底 ...

  10. oracle只导出触发器

    只要触发器,其他都不要 方法1:plsql develop调用exp:tools->export object—>trigger 方法2:select dbms_metadata.get_ ...