//序列化
public static byte[] objToByte(Object obj) {
try {
//创建输出流
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(baos);
//将obj对象写入到oos流中,继而写入到baos的byte[]中
oos.writeObject(obj);
//复制一份baos中的byte数组
byte[] array = baos.toByteArray();
oos.flush();
oos.close();
baos.close();
return array;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 反序列化
*<T>声明泛型,表示一个任意数据类型
*Class<T> clazz 调用者在调用方法时,将T具体化
*/
public static <T> T byteToObj(byte[] buf,Class<T> clazz) {
try {
//创建输入流
ByteArrayInputStream bais=new ByteArrayInputStream(buf);
ObjectInputStream ois=new ObjectInputStream(bais);
//ois读取bais中的byte数组
//将byte数组-->对象
T object = (T) ois.readObject();
ois.close();
bais.close();
return object;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Test
public void saveObjByte() {
//连接redis
Jedis jedis=new Jedis("192.168.30.30",6379);
//创建类的对象
User user1=new User();
user1.setAge(16);
user1.setId(2);
user1.setName("小g");
user1.setSex("男");
//对象-->byte数组 BinaryUtil是这三个方法的类
byte[] value = BinaryUtil.objToByte(user1);
byte[] key=BinaryUtil.objToByte("user01");
jedis.set(key, value);
User user = BinaryUtil.byteToObj(value, User.class);
//User [id=2, name=小g, sex=男, age=16]
System.out.println(user);
}