美文网首页
java对象储存到数据库

java对象储存到数据库

作者: 任未然 | 来源:发表于2020-10-19 16:15 被阅读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)
      }
    }
    

    相关文章

      网友评论

          本文标题:java对象储存到数据库

          本文链接:https://www.haomeiwen.com/subject/jpnkmktx.html