Java中的序列化和反序列化
来源:互联网 发布:python read csv 编辑:程序博客网 时间:2024/06/06 05:56
序列化和反序列化
何为序列化?何为反序列化?
解释(概念):
序列化:将对象转化成流的过程称为序列化
结果:(磁盘中)
反序列化:将流转化成对象的过程称之为反序列化
java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
怎么使用序列化和反序列化?
根据上面概念可知序列化和反序列都和对象有关。
1. java对象
在java中,想要java对象使用序列化和反序列化,必须让对象类实现java.io.Serializable接口(标记接口,空实现)
例:
public class Student implements Serializable{}
2.序列化
序列化主要依赖java.io.ObjectOutputStream,该类对java.io.FileOutputStream类进一步的封装,主要使用writeObject(Object obj)方法实现序列化功能。
例:
package io流;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Serializable;/** * 需求: 将对象序列化到盘符文件中 * * @author xiaojian * */public class Test {public static void main(String[] args) {Person p = new Person("小健",20);try {//创建文件输入流,文件FileOutputStream fos = new FileOutputStream(new File("e:\\obj.obj"));ObjectOutputStream oos = new ObjectOutputStream(fos);//实现序列化 writeObject(Object obj);oos.writeObject(p);//关闭流oos.close();fos.close();}catch (IOException e) {e.printStackTrace();}}}class Person implements Serializable{//属性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 Person() {// TODO Auto-generated constructor stub}public Person(String name, int age) {super();this.name = name;this.age = age;}}
结果:(磁盘中)
3.反序列化
反序列化主要依赖java.io.ObjectInputStream,该类对java.io.FileInputStream类进一步的封装,主要使用readObject(Object obj)方法实现序列化功能。
例:(同是刚才序列化的对象,文件)(注意捕获或抛异常)
FileInputStream fis = new FileInputStream(new File("e:\\obj.obj"));ObjectInputStream ois = new ObjectInputStream(fis);Person p = (Person) ois.readObject();System.out.println(p.getName()+":"+p.getAge());
结果:(控制台显示)
序列化·反序列化 完整的代码
package io流;import java.io.File;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 Test_完整 {public static void main(String[] args) throws IOException, ClassNotFoundException {Student s = new Student("小健",20);File file = new File("e:\\obj.obj");//序列writeObject(file,s);//反序列readObject(file);}//反序列化,控制台打印对象属性private static void readObject(File file) throws IOException, IOException, ClassNotFoundException {ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));Student stu = (Student) ois.readObject();System.out.println(stu.getName()+":"+stu.getAge());}//序列化,把对象存储到文件当中private static void writeObject(File file,Student s) throws IOException {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));oos.writeObject(s);oos.close();}}class Student implements Serializable{//属性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 Student(String name, int age) {super();this.name = name;this.age = age;}public Student() {// TODO Auto-generated constructor stub}}
阅读全文
0 0
- java中的序列化和反序列化
- JAVA中的序列化和反序列化
- Java中的序列化和反序列化
- Java中的序列化和反序列化
- java中的序列化和反序列化
- java 中的序列化和反序列化
- java中的序列化(Serializable)和反序列化
- java中的序列化和反序列化
- Java中的序列化和反序列化
- java中的序列化(Serializable)和反序列化
- java中的序列化和反序列化学习笔记
- Java序列化和反序列化
- java 序列化 和反序列化
- java 序列化和反序列化
- java 序列化和反序列化
- [java]序列化和反序列化
- java序列化和反序列化
- java 序列化和反序列化
- SpringMVC整体认识(一)
- iOS goback页面刷新问题
- 编程语言共同特性
- SharpGL中Finish和Flush的区别
- 洗牌算法
- Java中的序列化和反序列化
- scraping_深入了解一个网站的方法
- linux下mysql操作
- Codeforces 808B Average Sleep Time 题解
- Dataquest学习总结[6]
- 大前端完整学习路线(详解)(转载)
- 汉诺塔问题
- 10大H5前端框架
- onserverclick 执行C# 后台方法