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. TurtleBot教程

    TurtleBot TurtleBot combines popular off-the-shelf robot components like the iRobot Create, Yujin Ro ...

  2. Paper格式-国际会议版

    Paper Title 论文题目 Authors Name/s per 1st Affiliation (Author) 作者名字/s 每第一作者 line 1 (of Affiliation): d ...

  3. (并查集)Is It A Tree? --POJ--1308

    链接: http://poj.org/problem?id=1308 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...

  4. (最小生成树)QS Network -- ZOJ --1586

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586 http://acm.hust.edu.cn/vjudge/ ...

  5. 与数据库连接的页面增删改查 的easyui实现(主要是前端实现)

    一.首先看一下最终实现的效果,上图 二.思路,主要是分两个文件实现,一个是页面显示文件:代码如下: <html> <head> <title>示例管理</ti ...

  6. ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)

    一.后台如何接收从前台接收的数组: 使用request.getParameterValues(String xxx); <input type="text" name=&qu ...

  7. [Ubuntu Version] 如何在terminal 查看当前 ubuntu的版本号

    命令: locate locate /etc/*release/etc/lsb-release/etc/os-release 命令: catcat /etc/os-releaseNAME=" ...

  8. NET Core应用框架之BitAdminCore框架应用篇系列

      BitAdminCore是基于NET Core2.0的后端快速开发框架,本篇主要目标是介绍如何使用框架开发应用.框架的一些特性等. BitAdminCore核心特性: 保留行业规范,减少学习成本. ...

  9. C++ const 和static的总结以及使用

    一  static的使用 (作用域和存储方式) 1.作用域---------->隐藏 静态函数跟静态全局变量的作用类似 (静态函数不能被其它文件所用: 其它文件中可以定义相同名字的函数,不会发生 ...

  10. Python面向对象(特殊成员)

    day25 __init__     类()自动执行     __del__     __call__     对象()  类()() 自动执行     __int__      int(对象)    ...