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. CentOS7+Nginx+多个Tomcat配置

    转载自:https://blog.csdn.net/name_chc/article/details/73332272:亲测可用,加了一些注释: 配置多个tomcat转发 另附上tomcat启动慢的解 ...

  2. (水题) Div 3 -- SGU -- 105

    链接: http://vj.acmclub.cn/contest/view.action?cid=168#problem/E 时限:250MS     内存:4096KB     64位IO格式:%I ...

  3. visual studio 2015 rc &cordova -hello world

    初始环境,用来看看书,电影,上上网的win8,所以一切从头开始. 1,首先还是装visual studio 2015  rc吧,目前只放出在线安装,所以要很长很长时间.不过有新闻说很快要实现中国网友至 ...

  4. underscore objects

    1._.keys():获取对象的属性名,不包含原型链 _.keys = nativeKeys || function(obj) { if (obj !== Object(obj)) throw new ...

  5. Failed to get D-Bus connection: Operation not permitted

    通过centos7镜像创建了一个docker容器,并在容器中安装了一个apache服务,但是启动时发生如下报错 [root@1346963c2247 ~]# rpm -qa | grep httpdh ...

  6. RabbitMQ 消息队列 DEMO

    1. 引用 RabbitMQ.Client.5.1.0 2. http://localhost:15672/ public class TestController : ApiController { ...

  7. AbpZero的Swagger汉化之旅

    做汉化主要是为了出一份前后端都能看得懂的在线文档,废话不多说,我们开始准备, 我们要在启动项目的Startup.cs中重定向一下swagger的读取方式 1.在这个类下面,新增一个方法: public ...

  8. 蚂蚁男孩.队列组件(Framework.Mayiboy.Queue)

    它能做什么 主要是用来方便使用队列而诞生,该组件封装了Queue和Redis中的队列,能够通过简单配置就可以高效快速使用起来. 使用说明 一.    下载源码,自己手动编译,手动引用必要的程序集.(需 ...

  9. C#一个简单的关于线程的实例

    很多初学者听到线程会觉得晦涩难懂,很多资料一堆专有名词也是让人心烦意乱,本着学习加分享的态度,这里做一个简单的实例分享帮助初学者们初识多线程.  首先大概讲述一下多线程和多进程的区别,任务管理器里各种 ...

  10. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...