关于java序列化数据和反序列化的问题

主要面对的问题:注册时用户昵称输入EMOJI信息,MySQL数据库无法存储3~4字段的EMOJI数据,所以需要先对用户昵称进行序列化,再通过反序列化工具类对齐进行解码返回。

这里先列出一个例子,以供以后查看:

import java.io.Serializable;
/**
 * 序列化业务实体类
 * @author JM
 *
 */
public class Student implements Serializable{
	/**
	 * Student类通过实现Serializable接口拥有了序列化的能力
	 */
	private static final long serialVersionUID = 1L;
	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;
    }
}
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
 * 序列化用户数据
 * @author JM
 *
 */
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+"长度为:"+serialStr.length());
        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;  
    }
}

最后结果

序列化数据为:¬í

输出的反序列化数据为:?
 

你可能感兴趣的:(个人备忘,学习)