码迷,mamicode.com
首页 > 编程语言 > 详细

java对象与字符串的序列化和反序列化

时间:2014-08-29 10:51:57      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   java   io   ar   div   cti   

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SerializeUtils {
    private static final Logger LOG = LoggerFactory.getLogger(SerializeUtils.class);

    /**
     * 对象序列化为字符串
     */
    public static String serialize(Object obj) throws Exception {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(obj);  
        String serStr = byteArrayOutputStream.toString("ISO-8859-1");//必须是ISO-8859-1
        serStr = java.net.URLEncoder.encode(serStr, "UTF-8");//编码后字符串不是乱码(不编也不影响功能)
         LOG.info("对象obj:【" + obj + "】序列化serStr:【" + serStr + "】");
        
        objectOutputStream.close();
        byteArrayOutputStream.close();
        return serStr;
    }

    /**
     * 字符串 反序列化为 对象
     */
    public static Object unSerialize(String serStr) throws Exception {
        String redStr = java.net.URLDecoder.decode(serStr, "UTF-8");
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(redStr.getBytes("ISO-8859-1"));
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); 
        Object obj = objectInputStream.readObject();
        LOG.info("对象obj:【" + obj + "】反序列化serStr:【" + serStr + "】");
        
        objectInputStream.close();
        byteArrayInputStream.close();
        return obj;
    }

    public static void main(String[] args) throws Exception {
        List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("number", "123");
        map.put("name", "test");
        list.add(map);
        HashMap<String, String> map2 = new HashMap<String, String>();
        map2.put("number", "1232");
        map2.put("name", "test2");
        list.add(map2);
        
        String str=serialize(list);
        System.err.println(str);
        List<HashMap<String, String>> newList=(List<HashMap<String, String>>) unSerialize(str);

        for(Map m : newList) {
            System.out.println(m.get("number") + " " + m.get("name"));
        }
    }

 

java对象与字符串的序列化和反序列化

标签:style   blog   color   os   java   io   ar   div   cti   

原文地址:http://www.cnblogs.com/muzhongjiang/p/3944340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!