您的位置:首页 > 其它

序列化与反序列化

2017-02-08 16:30 176 查看
序列化:序列化是将对象的状态写入到特定的流中的过程 将对象状态转换为可保持或传输格式的过程

反序列化则是从特定的流中获取数据重新构建对象的过程

序列化(不再重新序列化)(要么父类也是可序列化的,要么有无参构造器 否则抛出异常)

a.实现Serializable接口 某些属性被限制序列化使用transient来修饰

b.创建对象输出流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\"))

c.调用writeObject()方法将对象写入文件 oos.writeObject(student/list);

d.关闭对象输出流

使用集合保存对象,可以将集合中的所有对象序列化

反序列化

a.实现Serializable接口

b.创建对象输入流 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\"))

c.调用readObject()方法读取对象 (student/Arraylist<E>)ois.readObject();

d.关闭对象输入流

如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时

必须按照写入的顺序读取

对象的输入输出流:

ObjectInputStream类

ObjectOutputStream类

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import advanced.test0412.NewsTitle;

public class ObjectIOTest {

public static void main(String[] args) {
String path = "D:/newsTitle.txt";
ObjectIOTest test = new ObjectIOTest();
test.outObject(path);
test.inputObject(path);
}

/*
* 对象输入流 ,反序列化
*/
public void inputObject(String path){
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(path);
ois = new ObjectInputStream(fis);

// NewsTitle title = (NewsTitle)ois.readObject();
List<NewsTitle> list = (List<NewsTitle>) ois.readObject();
System.out.println(list.get(0).getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

}

/*
* 对象输出流,序列化
*/
public void outObject(String path){
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(path, true);
oos = new ObjectOutputStream(fos);
List<NewsTitle> list = new ArrayList<NewsTitle>();
NewsTitle news = new NewsTitle(1, "国内", "管理员");
list.add(news);
oos.writeObject(list);
oos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: