Java实现序列化作用
2008-10-07 11:55
155 查看
(一)序列化作用:
把内存中的对象转化为另一种形式,以供传输或存储。
(二)序列化前提:
(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);
}
}
把内存中的对象转化为另一种形式,以供传输或存储。
(二)序列化前提:
(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接口就具备了被序列化的能力以及serialVersionUID的作用
- java实现序列化的作用
- Java基础:序列化(实现Serializable接口)作用
- 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用
- 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
- 【Java面试题】45 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
- 什么是java序列化,如何实现java序列化?或请解释Serializable接口的作用
- 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
- 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用
- java基础问题---什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
- java 序列化有什么作用
- 什么是Java序列化,如何实现Java序列化?
- Java序列化接口的作用总结1
- 什么是java序列化,如何实现java序列化?
- Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- Java 深拷贝和浅拷贝 利用序列化实现深拷贝
- java序列化(Serializable)的作用和反序列化
- java序列化的作用和反序列化