序列化与反序列化
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();
}
}
}
}
反序列化则是从特定的流中获取数据重新构建对象的过程
序列化(不再重新序列化)(要么父类也是可序列化的,要么有无参构造器 否则抛出异常)
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();
}
}
}
}
相关文章推荐
- 神奇的变量交换
- jQuery-级联表实现
- Andoid Activity四大启动模式
- FTP 服务器搭建
- 【CSS3特效】鼠标悬停动画
- php的错误开启
- Maven最佳时间,划分模块
- 洛谷 P1372
- xlistview的使用
- Dynamics CRM Online Administrator password reset
- Dynamics CRM Online Administrator password reset
- 如何实现JS函数的重载
- VLC的block_t
- 水纹波浪效果动画
- 能量项链
- 【BZOJ 3173】[Tjoi2013]攻击装置 二分图
- 微服务
- IO流_FileInputStream读取数据一次一个字节数组
- TDD最常见的误区
- js获取地址栏中传递的参数(两种方法)