【译】Java中的对象序列化
前言
好久没翻译simple java了,睡前来一篇。
译文链接:
http://www.programcreek.com/2014/01/java-serialization/
什么是对象序列化
在Java中,对象序列化指的是将对象用字节序列的形式表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,并且支持从数据库或文件中反序列化,从而在内存中重建对象;
为什么需要序列化
序列化经常被用于对象的网络传输或本地存储。网络基础设施和硬盘只能识别位和字节信息,而不能识别Java对象。通过序列化能将Java对象转成字节形式,从而在网络上传输或存储在硬盘。
那么为什么我们需要存储或传输对象呢?根据我的编程经验,有如下原因需要将对象序列化(以下原因,我表示没使用过。。。):
- 一个对象的创建依赖很多上下文环境,一旦被创建,它的方法和属性会被很多其它组件所使用;
- 一个包含了很多属性的对象创建后,我们并不清楚如何使用这些属性,所以将它们存储到数据库用于后续的数据分析;
顺便也说下,根据我(真正的我)的编程经验,序列化使用情况如下:
- 网络上的对象传输
- 使用一些缓存框架的时候,比如ehcache,将对象缓存到硬盘的时候,需要序列化,还有hibernate也会用到;
- RMI(远程方法调用)
Java序列化例子
以下代码展示了如何让一个类可序列化,对象的序列化以及反序列化;
对象:
package serialization;import java.io.Serializable;public class Dog implements Serializable {private static final long serialVersionUID = -5742822984616863149L;private String name;private String color;private transient int weight;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public void introduce() {System.out.println("I have a " + color + " " + name + ".");} }
main方法
package serialization;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream;public class SerializeDemo {public static void main(String[] args) {// create an objectDog e = new Dog();e.setName("bulldog");e.setColor("white");e.setWeight(5);// serializetry {FileOutputStream fileOut = new FileOutputStream("./dog.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut);out.writeObject(e);out.close();fileOut.close();System.out.printf("Serialized dog is saved in ./dog.ser");} catch (IOException i) {i.printStackTrace();}e = null;// Deserializetry {FileInputStream fileIn = new FileInputStream("./dog.ser");ObjectInputStream in = new ObjectInputStream(fileIn);e = (Dog) in.readObject();in.close();fileIn.close();} catch (IOException i) {i.printStackTrace();return;} catch (ClassNotFoundException c) {System.out.println("Dog class not found");c.printStackTrace();return;}System.out.println("\nDeserialized Dog ...");System.out.println("Name: " + e.getName());System.out.println("Color: " + e.getColor());System.out.println("Weight: " + e.getWeight());e.introduce();} }
结果打印:
Serialized dog is saved in ./dog.ser
Deserialized Dog ...
Name: bulldog
Color: white
Weight: 0
I have a white bulldog.
【译】Java中的对象序列化相关推荐
- Java中的对象序列化操作
文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...
- java 中的对象序列化
java对象序列化允许你将一个实现了Serializable接口的对象转换成byte,以方便以后的调用.应该在实现了Serializable接口的类内定义 private static final ...
- Java I/O中的对象序列化
Java I/O中的对象序列化 Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象.利用对象的序列化,可以实现轻量级持久性 ...
- 深圳Java培训:Java中的对象流和序列化
深圳Java培训:Java中的对象流和序列化 最近,在讲流的使用,其中对象流的作用其实就是将自定义类的对象与流之间相互转换的流. 看起来还是挺简单的,那么看下面的例子: public class St ...
- Java中 byte[]数组序列化和fastjson序列化区别
Java中 byte[]数组序列化和fastjson序列化区别 Java中,对于对象可以通过序列化成byte数组或者序列化成json形式,这里做下两者的对比. 首先看下实现方式: 1 byte数组序列 ...
- Java中的Json序列化,不容忽视的getter
文章目录 前言 一.Java中的Json序列化,不容忽视的getter 二.问题重现 1.核心代码 2.问题分析 2.1常用 JSON序列化库 的序列化原理: 总结 前言 提示:这里可以添加本文要记录 ...
- Java基础之对象序列化
概述 Java中的对象的内部状态只保存在内存中,其生命周期最长与JVM的生命周期一样,即JVM停止之后,所有对象都会被销毁.但有时候,Java对象是需要持久化的,因此Java提供了一种对象持久化方式- ...
- java中实现对象的深度克隆
1.什么是深度拷贝和浅拷贝 python中有深度拷贝(也可以叫深度克隆)和浅拷贝,同样在java中很多时候需要深度拷贝对象,所谓的深度拷贝对象指的就是对于对象的所用数据及其全部进行copy一份,变成两 ...
- 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?
写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...
最新文章
- 随机生成文件名字或随机生成一个数
- hive like 模糊匹配
- 自定义按键_DNF手游:策划宣布新增自定义按键布局,期待手游新版本的到来
- 【转】.net框架读书笔记---CLR内存管理\垃圾收集(六)
- 【DotNet 技能系列】VS工具快捷键及常用技巧
- 【手写数字识别】基于matlab GUI知识库手写数字识别(写字板+图片)【含Matlab源码 1227期】
- 易宝支付银行接口,各参数
- mouseover 和 mouseenter的区别
- 云计算对21世纪IT人的挑战
- Java后台日常学习环境搭建
- 美版iphone更新系统无服务器,iPhone 升级系统提示无法检查更新如何解决?
- sprintf和fprintf
- 《德鲁克管理思想精要》读书笔记小结
- 论文中world自带公式编辑器编辑的公式每次打开公式自动加粗问题解决。
- onmouseover 和onmousemove的区别
- 免疫荧光实验相关的注意事项汇总
- 射雕英雄传》中的爱情-孔庆东
- 《去哪儿网支付系统架构演进全历程》阅读有感
- java使用ffmpeg截取视频某个时间点的截图
- window 7 笔记本电源损耗修复(简单方法)
热门文章
- tomcat mysql eclipse_eclipse与tomcat及javaweb和mysql相关内容
- b+树时间复杂度_阿里面试,问了B+树,这个回答让我通过了
- mysql 关联更新_MySQL 规范
- 动漫风html源码,CSS3动画制作一个卡通风格的404错误页面代码
- POJ3522Slim Span(最大边与最小边差值最小的生成树)
- 在c++使用文件流(初学者必看)
- 【解决】Authentication plugin 'caching_sha2_password' cannot be loaded
- 【设计模式】分类和定义
- Eclipse配置的tomcat用debug模式启动不了start可以启动
- myeclipse设置注释格式