序列化工具类

2018-06-11  本文已影响0人  咪雅先森

这个问题之前面试也被问过。聊天的时候面试官也把具体的方法说了出来,验证了一下是这样的情况。
不序列化的存储方法就是将对象转成 json 串。
序列化的优点是反序列化时不需要提供类型信息(class),但缺点是序列化后的结果非常庞大,是JSON格式的5倍左右,这样就会消耗redis服务器的大量内存.

ObjectOutputStream/ObjectIntputStream 的具体在 I/O 流笔记中有更祥细的说明。

工具类实现

public class SerializeUtil {
   public static void main(String [] args){
       Jedis jedis = new Jedis("xxx.xxx.xxx.xxx");
       String keys = "name";
       // 删数据
       //jedis.del(keys);
       // 存数据
       jedis.set(keys, "zy");
       // 取数据
       String value = jedis.get(keys);
       System.out.println(value);
       
       //存对象
       Person p=new Person();  //peson类记得实现序列化接口 Serializable
       p.setAge(20);
       p.setName("嗯哼嗯哼");
       p.setId(1);
       jedis.set("person".getBytes(), serialize(p));
       byte[] byt=jedis.get("person".getBytes());
       Object obj=unserizlize(byt);
       if(obj instanceof Person){
           System.out.println(obj);
       }
   }
   
   //序列化
   public static byte [] serialize(Object obj){
       ObjectOutputStream obi=null;
       ByteArrayOutputStream bai=null;
       try {
           bai=new ByteArrayOutputStream();
           obi=new ObjectOutputStream(bai);
           obi.writeObject(obj);
           byte[] byt=bai.toByteArray();
           return byt;
       } catch (IOException e) {
           e.printStackTrace();
       }
       return null;
   }

//反序列化

public static Object unserizlize(byte[] byt){
     ObjectInputStream oii=null;
     ByteArrayInputStream bis=null;
     bis=new ByteArrayInputStream(byt);
     try {
         oii=new ObjectInputStream(bis);
         Object obj=oii.readObject();
         return obj;
     } catch (Exception e) {
         
         e.printStackTrace();
     }
     return null;
 }
}
上一篇 下一篇

猜你喜欢

热点阅读