Java 序列化对象为字符串 然后反序列化为对象

兄弟们,今日头条搜索三线城市程序员老陈关注我,我将持续不断推出视频教程。

一,概述

对象的序列化与反序列化其实就是将对象的状态保存下来,一般是保存到文件中,但是其实更常用的是将对象的序列化为字符串保存到数据库中,然后在需要读取对象情况的时候反序列化为对象。

二,Serializable接口

可以实行序列化的类需要实现Serializable接口,此处需要注意的是如果某个属性不需要被序列化,可以添加transient关键字,这个用的较少此处也不演示了。

package org.maoge.io;
import java.io.Serializable;
//Student类用于演示对象的序列化
public class Student implements Serializable{//Student类通过实现Serializable接口拥有了序列化的能力
	private String id;
	private String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

三,序列化与反序列化方法封装

一般封装为静态方法,需要的时候拿过来用就行,以下是示例:

package org.maoge.io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializeDemo {
	//测试入口
	public static void main(String[] args) throws Exception{
		Student student=new Student();
		student.setId("1");
		student.setName("王老三");
		String serialStr=serializeToString(student);
		System.out.println(serialStr);
		Student deserialStudent=(Student) deserializeToObject(serialStr);
		System.out.println(deserialStudent.getName());//输出王老三
	}
	//序列化
	public static String serializeToString(Object obj) throws Exception{
		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        ObjectOutputStream objOut = new ObjectOutputStream(byteOut);  
        objOut.writeObject(obj);  
        String str = byteOut.toString("ISO-8859-1");//此处只能是ISO-8859-1,但是不会影响中文使用
        return str;
	}
	//反序列化
	public static Object deserializeToObject(String str) throws Exception{
		 ByteArrayInputStream byteIn = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));  
	     ObjectInputStream objIn = new ObjectInputStream(byteIn);  
	     Object obj =objIn.readObject();  
	     return obj;  
	}
}

你可能感兴趣的:(Java----基础)