关于接口、关于序列化

最近工作大量用到接口编程,还有序列化问题,就在网上看了很多的资料,做了一些整理,姑且,称为组合创新吧~~

感谢被引用的很多作者,谢谢你们无私的分享,后辈才能快速学习。

(1)为什么不把所以类都标为可序列化?

之所以需要标记某个类是序列化的,而不是把所有的类都设为可序列化,就是告诉编译器我需要该类能够实现序列化,我甘愿承担该类序列化所带来的信息泄露等风险。就像C中的类型转换,有些需要显示的强转,其实就是个标记,告诉编译器我知道这么做的风险,你别担心!而且有些类序列化是没有意义的,比如Thread,把它序列化,然后调到虚拟机运行有什么用呢?

(2)标记接口

只有一个接口名,不包含任何方法,这种接口被称作标记接口(tagging inteface),java.io.Serializable就是标记接口,同样jdk中java.lang.Cloneable,java.util.RandomAccess,java.util.EventListener,java.rmi.Remote等这些都是标记接口。标记接口的作用是做类型识别。

标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。

标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。

其实在OO的世界中,空接口可以算是最高的抽像。

(3)序列化和反序列化是IO的知识:

对象的序列化和发序列化

1、对象序列化,就是把Object转换成byte序列,反之叫对象的反序列化

2、序列化流(ObjectOuputStream)-----
writeObject

反序列化流(ObjectInputStream)------ readObject

3、序列化接口(Serializable)对象必须实现序列化接口,才实现序列化负责将出现异常。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-29 07:27:09

关于接口、关于序列化的相关文章

Java Serializable接口(序列化)理解及自定义序列化

  1 Serializable接口 (1)简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等),然后可以在适当的时候再将其状态恢复(也就是反序列化).serialization 不但可以在本机做,而且可以经由网络操作.它自动屏蔽了操作系统的差异,字节顺序等.比如,在 Windows 平台生成一个对象并序列化之,然后通过网络传到一台 Unix 机器上,然后可以在这台Unix机器上正确地重构(deserialization)这个对象. 不必

C#实现接口xml序列化与反序列化

C#中接口无法被xml序列化,提示不支持.百度和bing也搜不到,只好自己动手写了 原理上肯定支持,.Net自己的xml序列化有一个IXmlSerializable接口. 自行实现该接口,并取得实现改接口的类,再进行自定义的序列化处理即可. using System.Collections; using System.Xml.Serialization; using System; using System.Xml; [XmlRoot("SerInterface"), Serializ

python接口测试之序列化与反序列化(四)

作者 无涯 在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象. 在python的标准库中,专门提供了json库与pickle库来处理这部分. 先来学习json的库,导入json库很简单,直接import json,下面通过具体的实例来说明json库对序列化与反序列化的使用.json库的主要方法为: #!/usr/bin/env python#coding:utf-8import  jsonp

初识序列化和反序列化,使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程.对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程.本篇主要包括: ● 使用BinaryFormatter类进行序列化和反序列化● 使用ISerializable接口自定义序列化过程● 使用XmlSerializer类进行序列化和反序列化 □ 使用BinaryFormatter类进行序列化和反序列化 首先把需要序列化的类打上[Serializable]特性,如果某个字段不需

Hadoop序列化与Writable接口(一)

Hadoop序列化与Writable接口(一) 序列化 序列化(serialization)是指将结构化的对象转化为字节流,以便在网络上传输或者写入到硬盘进行永久存储:相对的反序列化(deserialization)是指将字节流转回到结构化对象的过程. 在分布式系统中进程将对象序列化为字节流,通过网络传输到另一进程,另一进程接收到字节流,通过反序列化转回到结构化对象,以达到进程间通信.在Hadoop中,Mapper,Combiner,Reducer等阶段之间的通信都需要使用序列化与反序列化技术.

Serializable接口实现对象序列化

对象序列化就是把一个对象变为二进制的数据量的一种方法,通过对象序列化可以方便地实现对象的传输或存储. class Person2 implements Serializable { private String name; // 声明name属性 private int age; // 声明age属性 public Person2(String name, int age) { // 通过构造设置内容 this.name = name; this.age = age; } public Stri

关于序列化接口的理解

一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了.(存储到硬盘是一个文件,不需要我们去解析,如果用记事本打开解析会出现乱码,解析要用特定的方式,不用我们管. 我们只需要读取). 把对象存储到硬盘上的一个文件中,这个文件的标准扩展名是(.object). 在很多框架中就会有这种.object结尾的文件,因为很多对象都不创建,创建起来太麻烦,直接读取,

hadoop中的序列化与Writable接口

本文地址:http://www.cnblogs.com/archimedes/p/hadoop-writable-interface.html,转载请注明源地址. 简介 序列化和反序列化就是结构化对象和字节流之间的转换,主要用在内部进程的通讯和持久化存储方面. 通讯格式需求 hadoop在节点间的内部通讯使用的是RPC,RPC协议把消息翻译成二进制字节流发送到远程节点,远程节点再通过反序列化把二进制流转成原始的信息.RPC的序列化需要实现以下几点: 1.压缩,可以起到压缩的效果,占用的宽带资源要

复习PHP-语言参考-预定义接口

1.Traversable 他是一个遍历接口规范 注意:发现一个有用的函数get_declared_classes,可以以数组形式显示当前脚本下所有已经定义的类名 2.Iterator Iterator迭代器继承自Traversable,是一种遍历对象内容的对象. 你可以自己写一个子类继承自它,并写上具体遍历的方法. Iterator包含:current(返回当前元素),key(当前键),next(下一个元素),rewind(返回至初始元素),valid(检测当前元素是否存在)五种方法. 3.I

几种Android数据序列化方案

一.引言 数据的序列化在Android开发中占据着重要的地位,无论是在进程间通信.本地数据存储又或者是网络数据传输都离不开序列化的支持.而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响. 从广义上讲,数据序列化就是将数据结构或者是对象转换成我们可以存储或者传输的数据格式的一个过程,在序列化的过程中,数据结构或者对象将其状态信息写入到临时或者持久性的存储区中,而在对应的反序列化过程中,则可以说是生成的数据被还原成数据结构或对象的过程. 这样来说,数据序列化相当于是将我们原先的对象序列