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. java-Runtime 调用命令

    java是一个跨平台的语言,可以在多种平台上运行相应的程序,但是有些时候进行数据的提取时,可能就需要系统的相关命令,尤其是调用linux命令 这时候就需要使用java的Runtime命令,来执行lin ...

  2. HBase Thrift2 CPU过高问题分析

    目录 目录 1 1. 现象描述 1 2. 问题定位 2 3. 解决方案 5 4. 相关代码 5 1. 现象描述 外界连接9090端口均超时,但telnet端口总是成功.使用top命令观察,发现单个线程 ...

  3. 深入浅析Node.js单线程模型

    Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这 ...

  4. java实现自动生成四则运算

    Github项目链接:https://github.com/shoulder01/Fouroperation.git 一.项目相关要求 1. 使用 -n 参数控制生成题目的个数(实现) 2.使用 -r ...

  5. 使用VSTS进行单元测试练习

    本次作业要求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没有书的同学 ...

  6. Facebook支撑万亿Post搜索背后的技术窥探

    转自http://www.csdn.net/article/2013-10-29/2817333-under-the-hood-building-posts-search 近日,Facebook为po ...

  7. tf中softmax_cross_entropy_with_logits与sparse_softmax_cross_entropy_with_logits

    其实这两个都是计算交叉熵,只是输入数据不同. #sparse 稀疏的.稀少的 word_labels = tf.constant([2,0]) predict_logits = tf.constant ...

  8. Feed back TFS 2017 RC upgrade status to product team in product group 2017.03.01

    作为微软的MVP,有一个我最喜欢的好处,就是可以与产品组(产品研发部门)有零距离接触,可以最先拿到即将发版的产品,并且和产品组沟通,对产品中出现的问题实时反馈. 看到TFS产品组吸收了自己的建议和反馈 ...

  9. asp.net—策略模式

    一.什么是策略模式 定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换. 二.怎么使用策略模式 首先模拟一个场景:有一个用户想买车.  可以有多种方式买车: (1 ...

  10. winform :DataGridView添加一列checkbox

    #region 添加checkbox列   public void AddCheckBox()        { DataGridViewCheckBoxColumn columncb = new D ...