(一)序列化作用:
把内存中的对象转化为另一种形式,以供传输或存储。
(二)序列化前提:
(1)要序列化对象必须是可序列化的,即必须实现 Serializable 接口。
(2)要序列化对象的属性也都是可序列化的。
(3)要序列化对象引用的对象也必须是可序列化的,如:要序列化一个 HashMap 实例,需要把放入到HashMap中的对象也都序列化。
(4)要序列化一个内部类,该内部类必须可序列化,并且外部类也必须可序列化。
(5)基本数据类型都是可以序列化的。
(三)序列化举例:
下面是一个User类,演示了把一个User实例写入文件,然后在再文件中读出。
package serialize;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 2143L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
/**
* @todo 将一个可以序列化的对象写入文件
* @param obj
* 要保存的对象
* @param fileName
* 目标文件
*/
public void writeToFile(Object obj, String fileName) {
ObjectOutputStream oos = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(fileName);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
System.out.println("write ok!");
} catch (Exception e) {
System.out.println("write false! The error : " + e.getStackTrace());
} finally {
//关闭文件流
try {
if (oos != null) {
oos.close();
}
if(fos != null){
fos.close();
}
} catch (IOException e) {
System.out.println("close flus false! The error : " + e.getStackTrace());
}
}
}
/**
* @param fileName
* 保存对象的文件
* @return 从文件中得到的对象
*/
public Object getObjFromFile(String fileName) {
Object obj = null;
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(fileName);
ois = new ObjectInputStream(fis);
obj = ois.readObject();
ois.close();
System.out.println("read ok!");
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭文件流
try {
if (ois != null) {
ois.close();
}
if(fis != null){
fis.close();
}
} catch (IOException e) {
System.out.println("close flus false! The error : " + e.getStackTrace());
}
}
return obj;
}
public static void main(String[] args) {
String fileName = "c://user.txt"; // 保存对象的文件
User user = new User("@pony", 28); // 创建一个User对象
user.writeToFile(user, fileName); // 将对象写入文件
User u = (User) (user.getObjFromFile(fileName)); // 从文件中取得对象
// 输出对象名
if (u != null)
System.out.println("ok, get the user object from the file. /nThe user's name is : " + u.name);
}
}
分享到:
相关推荐
Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...
序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例...虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...
主要介绍了实例解析Json反序列化之ObjectMapper,json自定义序列化的方法,需要的朋友可以了解下。
克隆和序列化(Java )实例和源代码
主要介绍了java原生序列化和Kryo序列化性能实例对比分析,涉及Java和kryo序列化和反序列化相关实例,小编觉得很不错,这里分享给大家,希望给大家一个参考。
包括两个工程代码:SerializationClient和SerializationServer,详细解述了序列化和反序列化过程,可直接部署到tomcat下运行,也可import到eclipse下编辑查看.非常好的例子!
Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...
java 简单 网络套接字 序列化&反序列化实用实例,可供初学习者学习
主要介绍了 Java 序列化详解及简单实现实例的相关资料,使用序列化目的:以某种存储形式使自定义对象持久化,将对象从一个地方传递到另一个地方,需要的朋友可以参考下
java,使用序列化,多次将类的实例写入txt文件,以追加方式而非覆盖方式,同样反序列化从txt文件中读取出来,并显示在控制台上。
5.2 相关知识 5.2.1 序列化的概念 5.2.2 序列化应用 5.2.3 序列化的几种方式 5.2.4 对象实现机制 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第3页。 5.2.1 序列化的概念 将在内存中的各种...
Serialization(序列化)是一种将对象以一连串的字节描述的...在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。……
主要介绍了Java 序列化和反序列化实例详解的相关资料,需要的朋友可以参考下
序列化与反序列化是指Java对象与字节序列的相互转换,一般在保存或传输字节序列的时候会用到,下面有两个Java实现序列化与反序列化的简单示例,不过还是先来看看序列和反序列化的具体概念:
今天小编就为大家分享一篇关于Java序列化与反序列化的实例分析讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了Java原生序列化和反序列化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 反序列化PHP ,java解析php序列化的字符串,工具包和工程实例
主要介绍了java 序列化与反序列化的实例详解的相关资料,需要的朋友可以参考下
Java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个...