序列化和反序列化

序列化

概念

是指把程序中的Java对象 ,输出 ,永久的保存在磁盘中。用来在多个服务器直接传输Java对象的信息。

需要使用工具类ObjectOutputStream完成序列化。

构造方法

  • ObjectOutputStream(OutputStream out) 含参构造

普通方法

void writeObject(Object obj)        //将指定的对象写入 ObjectOutputStream。 

反序列化

概念

是指把磁盘中,已经被序列化好的文件。读取,恢复到程序中的过程。

需要使用工具类ObjectInputStream完成反序列化。

构造方法

  • ObjectInputStream(InputStream in) 含参构造

普通方法

Object readObject()              // 从 ObjectInputStream 读取对象,读取序列化数据。

图解

14--API-序列化和反序列化_java编程

测试

如果你的文件,想要支持序列化,必须实现Serializable接口,算是开启了序列化功能.

NotSerializableException - 要序列化的某些对象不实现java.io.Serializable接口。

//这个类用来测试 序列化  反序列化
		public class Test1_Seria {
			public static void main(String[] args) {
			    method() ; //序列化
				method2();//反序列化
			}
			//反序列化:把磁盘中已经序列化好的文件,读取,恢复成Java对象
			public static void method2() {
				try {
					//创建反序列化对象
					ObjectInputStream in = new ObjectInputStream(
												new FileInputStream("D:\\iotest\\1.txt"));
					//开始反序列化
					Object obj = in.readObject();
					System.out.println(obj);//Student [name=皮皮霞, age=22]	
					//释放资源
					in.close();
				} catch (Exception e) {
					e.printStackTrace();
				}	
			}
			//序列化:把Java对象, 输出 ,永久保存到磁盘中
			public static void method() {
				try {
					Student s = new Student("皮皮霞",22);
					//创建序列化对象
					ObjectOutputStream out = new ObjectOutputStream(
													new FileOutputStream("D:\\iotest\\1.txt")) ;
					//开始序列化
					out.writeObject(s);
					
					//释放资源
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				} 	
			}
		}
		//创建Student
		//1、如果你的文件,想要支持序列化,必须实现Serializable接口,算是开启了序列化功能
		//否则:java.io.NotSerializableException: cn.tedu.io.Student
		class Student implements Serializable{
			
			//2、自动生成本文件的一个唯一标识,版本号id
			private static final long serialVersionUID = 1L;
			
			//构造方法
			public Student() {}
			public Student(String name, int age) {
				super();
				this.name = name;
				this.age = age;
			}
			private String name ;
			private int age ;
			//set() get()
			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;
			} 
			//toString()
			@Override
			public String toString() {
				return "Student [name=" + name + ", age=" + age + "]";
			}
		}