- 浏览: 666168 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
今天我们主要来讲解一下对象序列化,首先我们需要知道什么是对象序列化,所谓的对象序列化就是将一个对象转换为二进制流,如果一个类的对象要想实现序列化,则该对象所在的类必须实现Serializable接口,在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力。
序列化的思想是“冻结”对象状态,传输对象状态(写到磁盘、通过网络传输等等),然后“解冻”状态,重新获得可用的Java对象,所有这些事情的发生有点像魔术,这要归功于ObjectInputStream/ObjectOutputStream类,完全保真的元数据以及程序员愿意用Serializable标识接口标记他们的类,从而“参与”这个过程。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例,如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因此static代表类的状态,transient代表对象的临时数据。
对象序列化在一下场景使用比较合适:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI(Remote Method Invocation 远程方法调用)传输对象的时候;
如果要想实现对象的序列化,则还要依靠ObjectOutputStream类和ObjectInputStream类,前者属于序列化操作,而或者属于反序列化操作。
package com.iflytek.io03; import java.io.Serializable; /** * @author xudongwang 2012-1-8 * * Email:xdwangiflytek@gmail.com */ public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String toString() { return "姓名:" + this.name + ",年龄:" + this.age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
下面通过ObjectOutputStream完成序列化操作:
package com.iflytek.io03; import java.io.File; import java.io.FileOutputStream; import java.io.ObjectOutputStream; /** * @author xudongwang 2012-1-8 * * Email:xdwangiflytek@gmail.com */ public class ObjectOutputStreamDemo { public static void main(String args[]) throws Exception { File file = new File("d:" + File.separator + "demo.txt"); ObjectOutputStream oos = null; oos = new ObjectOutputStream(new FileOutputStream(file)); Person per = new Person("王旭东", 21); oos.writeObject(per); oos.close(); } }
对象被实例化之后,就可以通过ObjectInputStream进行反序列化的操作
package com.iflytek.io03; import java.io.File; import java.io.FileInputStream; import java.io.ObjectInputStream; /** * @author xudongwang 2012-1-8 * * Email:xdwangiflytek@gmail.com */ public class ObjectInputStreamDemo { public static void main(String args[]) throws Exception { File file = new File("d:" + File.separator + "demo.txt"); ObjectInputStream ois = null; ois = new ObjectInputStream(new FileInputStream(file)); Object obj = ois.readObject(); Person per = (Person) obj; System.out.println(per); } }
以上操作实际上是整个对象进行的序列化操作,如果现在假设类中的某个属性不希望被序列化的话,则使用transient关键字进行声明;
private transient String name;
由上面可知可以对一个对象序列化,那么因为Object可以接受任意的引用数据类型,所以也可以同时对多个对象一起进行序列化操作,包括数组;
package com.iflytek.io03; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * @author xudongwang 2012-1-8 * * Email:xdwangiflytek@gmail.com */ public class SerializableDemo { public static void main(String args[]) throws Exception { Person per[] = { new Person("张三", 30), new Person("李四", 40),new Person("王五", 50) }; serializable(per); Person p[] = (Person[]) delSerializable(); print(p); } public static void serializable(Object obj) throws Exception { File file = new File("d:" + File.separator + "demo.txt"); ObjectOutputStream oos = null; oos = new ObjectOutputStream(new FileOutputStream(file)); oos.writeObject(obj); oos.close(); } public static Object delSerializable() throws Exception { Object temp = null; File file = new File("d:" + File.separator + "demo.txt"); ObjectInputStream ois = null; ois = new ObjectInputStream(new FileInputStream(file)); temp = ois.readObject(); return temp; } public static void print(Person per[]) { for (Person p : per) { System.out.println(p); } } }
发表评论
-
log4j xml配置详解
2014-06-18 10:37 1110<?xml version="1.0&qu ... -
test
2013-07-29 09:16 0private static CacheImpl insta ... -
多文件上传 by MultipartFile and Multiple
2012-12-03 09:13 14312最近的一个项目中,需要用到 ... -
布局框架-SiteMesh
2012-11-30 08:57 2552最近在一个项目中使用 ... -
Servlet
2012-12-07 08:36 1512一、认识 Servlet : ... -
连接池
2012-12-10 08:42 1406... -
忆Java String
2012-11-15 08:38 1230平时 .NET 写多了, Java ... -
Eclipse中右键快速定位文件资源的工具
2012-11-09 08:43 1975当你开发.NET项目后,使用VS习惯了再来使用Java和Ecl ... -
Java中MessageFormat对象实现格式化字符串输出,类似C#中的string.format方法
2012-09-29 11:39 3633平时.NET做多了,再做Java时,总会进行一些比较,比如说J ... -
byte[]与InputStream互转
2012-09-29 11:39 1541InputStream转byte[] private ... -
统一中英文长度问题
2012-07-20 00:17 1906最近因为在做一个项目要求很多都是英文,所以这就涉及到在页 ... -
Java中Process的waitFor()阻塞问题
2012-07-21 01:00 8859在做视频转换时,调用外部的 exe 去进行一些视频 ... -
Tomcat注册成系统服务
2012-07-17 00:00 1524为了部署项目后不出现黑色的 doc 命令框,所以很 ... -
urlrewrite实现伪静态化
2012-07-25 00:41 3185产生背景 静态网页与动态网页比较: ... -
Java中java.util.Date时间和java.sql.Date时间的相互转化
2012-01-30 22:49 2918刚刚写用 JS 禁用退格键时( http ... -
使用BeanUtils类简化request和resultset转换
2012-01-21 20:23 2906当提交表单时,如果没有使用Struts等框架的话,你的代 ... -
JDBC的多条件动态查询
2012-01-19 11:05 7123前面我已经提到了现在的项目无非就是列表里的分页加多条件查 ... -
JDBC分页
2012-01-19 10:15 5485不知道大家做项目做到最后有什么感觉没有,其实大家做来做去 ... -
Java农历(阴历)工具类
2012-01-20 11:30 2311在真实的项目开发中会可能会遇到项目需要对阴历即我们所说的农历节 ... -
Eclipse中java项目引用dll库的路径设置(System.loadLibrary()调用Dll路径问题)
2012-01-16 14:13 4215右击项目名|选择属性properties|在左边列表内选择“J ...
相关推荐
将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机。对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象...
把字节序列恢复为Java对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1)把对象的字节序列地保存到硬盘上,通常存放在一个文件中; 2)在网络上传送对象的字节序列。 一、JDK类库...
Java序列化(java.io.Serializable) Hadoop序列化的特点 Hadoop的序列化格式:Writable 序列化格式特点: 紧凑:高效使用存储空间。 快速:读写数据的额外开销小 可扩展:可透明地读取老格式...
为什么实现了java.io.Serializable接口才能被序列化 transient的作用是什么 怎么自定义序列化策略 自定义的序列化策略是如何被调用的 ArrayList对序列化的实现有什么好处 Java对象的序列化 ...
5.3 实施过程 5.3.1 任务一 使用serializable序列化实体对象 5.3.2 任务二 反序列化将Person对象从磁盘上读出 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第9页。 5.3.1 任务一 使用...
主要介绍了Java IO流对象的序列化和反序列化实例详解的相关资料,需要的朋友可以参考下
java.io.Serializable序列化问题
主要介绍了java IO数据操作流、对象序列化、压缩流代码解析,具有一定借鉴价值,需要的朋友可以参考下
反序列化:从IO流中恢复对象; 意义:序列化机制允许将实现序列化的Java对象转换为字节序列,并将字节序列保存在磁盘中,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使地对象可以脱离程序的运行而独立...
IO实现本地序列化和反序列化,面向对象,集合等
java笔试题输出结果 Java JSON 库的基准测试 目的 该项目使用 . 它涵盖以下库: (来自Oracle) 如果可用,数据绑定和“流”(自定义打包和解包)实现都经过测试。 使用 1、10、100 和 1000 KB 大小的有效负载评估两...
Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...
Java基础 IO file/输入输出/字节/字符流 BugReport 序列化/反序列化
一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接口即可(还要实现无参数的构造方法)。该接口是一个标记式接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。...
类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...
文件序列化示例 如何用Java将对象写入文件 如何从文件读取对象 文件压缩示例 用Java压缩ZIP格式的文件 从Java中的ZIP文件解压缩文件 目录 目录操作示例列表。 获取当前工作目录 建立目录 删除目录 复制目录 遍历...
IO,Socket通讯,序列化.pptx
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
主要介绍了java 中序列化NotSerializableException问题解决办法的相关资料,这里对序列化问题进行描述说明,并提供解决办法,希望能帮助到大家,需要的朋友可以参考下
Java反序列化备忘单 面向渗透测试人员和研究人员的备忘单,其中涉及各种Java(JVM)序列化库中的反序列化漏洞。...Java反序列化安全性常见问题解答 来自Foxgloves安全 主要演讲,演讲和文档 编组泡菜 通过@frohoff &