java对象储存到数据库

2020-10-19  本文已影响0人  任未然

一. 概述

在开发一些工具的时候, 经常会用到反射, 其中有个方法Object invoke(Object obj, Object... args), 参数里有很多对象参数, 如果我们想预先把参数保存下来, 之后就方便执行了, 应用场景: 例如推送数据失败重推. 本文将介绍如何把把对象转成字符串保存到数据库

二. 代码

2.1 编写工具类

import javax.xml.bind.DatatypeConverter;
class ObjectUtil {

    /**
     * 把对象转成字符串
     */
    public static String objectToString(Object obj) {
        // 对象转字节数组
        AtomicReference<String> str = new AtomicReference<>();
        Optional.ofNullable(obj).ifPresent(o -> {
            try {
                byte[] bytes = writeObj(o);
                str.set(DatatypeConverter.printBase64Binary(bytes));
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return str.get();
    }

    /**
     * 解析字符串为对象
     */
    public static Object stringToObject(String str) {
        AtomicReference<Object> obj = new AtomicReference<>();
        Optional.ofNullable(str).ifPresent(s -> {
            try {
                byte[] bytes = DatatypeConverter.parseBase64Binary(str);
                obj.set(readObj(bytes));
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return obj.get();
    }

    /**
     把对象转为字节数组
     */
    public static byte[] writeObj(Object obj) throws Exception {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream);
        outputStream.writeObject(obj);
        outputStream.close();
        return byteArrayOutputStream.toByteArray();
    }
    /**
     把字节数组转为对象
     */
    public static Object readObj(byte[] bytes) throws Exception {
        ObjectInputStream inputStream = null;
        try {
            inputStream = new ObjectInputStream(new ByteArrayInputStream(bytes));
            return inputStream.readObject();
        } finally {
            inputStream.close();
        }
    }
}

2.1 测试

import javax.xml.bind.DatatypeConverter;
public class Test{
  @Test
  public void ObjectToString(){
      // 声明一个对象
      HelloWorld hello= new HelloWorld();
      // 把对象转成字符串
      String str = ObjectUtil.objectToString(hello) ;
      // 解析字符串为对象
      hello = (HelloWorld)ObjectUtil.stringToObject(str)
  }
}
上一篇下一篇

猜你喜欢

热点阅读