Mysql存储二进制对象数据

首先数据库存储一个Object对象,需要在数据库表中定义一个blob类型的字段

与数据库对应的实体类

编写一个操作二进制的工具类

import java.io.*;

/**
 * byte[]类型操作类
 */
public class BlobUtil {

    /**
     * 把object对象序列化为二进制字节数组
     * @param object
     * @return
     */
    public static byte[] setObject(Object object) {
        ByteArrayOutputStream baos = null;
        ObjectOutputStream out = null;
        try {
            baos = new ByteArrayOutputStream();
            out = new ObjectOutputStream(baos);
            out.writeObject(object);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (baos != null) {
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return baos.toByteArray();
    }

    /**
     * 把二进制字节数组反序列化为object对象
     * object当中的每个javaBean对象都必须实现序列化
	 * 最外层的类必须生成一个序列化ID
     * @param bytes
     * @return
     */
    public static Object getObject(byte[] bytes) {
        Object obj = null;
        ByteArrayInputStream bais = null;
        ObjectInputStream in = null;
        try {
            bais = new ByteArrayInputStream(bytes);
            in = new ObjectInputStream(bais);
            obj = in.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bais != null) {
                try {
                    bais.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return obj;
    }
}

需要转换为byte[]的对象必须实现序列化和生成一个序列化ID,生成一个序列化ID是为了解决类当中一但有修改,反序列化时序列化ID就会对应不上,如下图:

类中如果有其他类为变量也需要实现序列化,否则从数据库中取出数据然后反序列化成Object对象的时候会直接报错

调用二进制工具类来转换数据然后进行存取就可以了。

猜你喜欢

转载自blog.csdn.net/m0_37845840/article/details/82694081