序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。
可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。对象序列化可以实现分布式对象,利用序列化可以实现深复制(clone)。
实现java.io.Serializable 接口以启用其序列化功能,序列化接口没有方法或字段,仅用于标识可序列化的语义。
为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。private static final long serialVersionUID = 6111235636157041674L;
如果你的对象序列化后存到硬盘上面后,可是后来你却更改了类的field(增加或减少或改名),当你反序列化时,就会出现Exception的,这样就会造成不兼容性的问题。
但当serialVersionUID相同时,它就会将不一样的field以type的缺省值赋值(如int型的是0,String型的是null等),这个可以避开不兼容性的问题。所以最好给serialVersionUID赋值
eclipse生成serialVersionUID :实现Serializable后,编辑器左边会有一个警告标记(灯泡加叹号),双击它,会有一个菜单弹出,可以选择生成默认的serialVersionUID(1L),还是随机的。
transient是用于声明序列化的时候不被存储的,这样反序列话是出不来的。如 private transient String password;
如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。
package common; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class SerializableObj implements Serializable { private static final long serialVersionUID = 6106500970475457768L; private String name; public SerializableObj() { this.name = "张三"; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } /** * ByteArrayOutputStream也可以换替换为FileOutputStream * * 节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。 处理流:使用节点流作为输入或输出。是使用一个已经存在的输入流或输出流连接创建的。 * 一般情况下是:先打开的后关闭,后打开的先关闭 * * 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b * * 例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b * * 当然完全可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法 * * 如果将节点流关闭以后再关闭处理流,会抛出IO异常 * * * @author zw * @date 2013-4-11 * @param args * @return void */ public static void main(String[] args) { SerializableObj serializableObj = new SerializableObj(); ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; ByteArrayInputStream bais = null; ObjectInputStream ois = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); serializableObj.setName("李四"); oos.writeObject(serializableObj); byte[] buf = baos.toByteArray();// 获取内存缓冲中的数据 bais = new ByteArrayInputStream(buf); ois = new ObjectInputStream(bais); serializableObj = (SerializableObj) ois.readObject(); System.out.println(serializableObj.getName()); baos.close(); oos.close(); bais.close(); ois.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (oos != null) { try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (ois != null) { try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
相关推荐
什么叫序列化? 我们都知道对象是暂时保存在内存中的,不能用U盘考走了,有时为了使用介质转移对象,并且把对象的状态保持下来,就需要把对象保存下来,这个过程就叫做序列化,通俗点,就是把人的魂(对象)收伏成一...
Vbs序列化/反序列化Json基类 可直接使用,bug已被我修复 Example: Dim fso, json, str, o, i Set json = New VbsJson Set fso = WScript.CreateObject("Scripting.Filesystemobject") str = fso.OpenTextFile(...
java 对象的序列化与反序列化 java 对象的序列化与反序列化
序列化和反序列化的封装类,只要调用就行 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下。 SOAP...
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
C++ JSON 序列化与反序列化 相关的博客文章见:http://blog.csdn.net/TragicGuy
序列化和反序列化dll文件和proto
C# xml序列化及反序列化(解析xml为对象及对象转xml保存),方法一反序列化取节点KV值,方法二反序列化取节点标签值,方法三取节点KV值,并增加节点对象数组及节点标签组合反序列化
极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。
[{"listA":[{"id":"fds","name":"张三"},{"id":"fds","name":"李四"}],"test":"432"}, {"listA":[{"id":"fds","name":"张三"},{"id":"fds","name":"李四"}],...数组里面封装数组的反序列化方法,通过两个bean,进行封装
主要介绍了实例解析Json反序列化之ObjectMapper,json自定义序列化的方法,需要的朋友可以了解下。
C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化
jackson json序列化 json反序列化 jar包 直接下载拷贝到项目中buildpath即可使用
delphi_JSON序列化反序列化
Unity 中使用Protobuf进行序列化和反序列化的Demo
本Dll提供了二进制序列化和Xml序列化,序列化之后,可以对序列化数据,进行压缩。本dll提供了两种压缩方式,GZipStream和DeflateStream,在使用Webservice作为服务端的系统中,提高传输性能是比较关键的,而提高传输...
反射与序列化示例-序列化窗体所有控件
大数据场景下序列化和反序列化技术,谷歌提供技术 protobuf-jetbrains-plugin-0.13.0.zip
序列化和反序列化思路是通过一个类来映射XML,XML里面的元素,都被映射到类的成员变量。 业务处理不直接面对XML,而是面对类进行操作。反序列化是指把XML解析出来的类,序列化是指把类转换成XML字符串。所以我们的...