Java序列化和反序列化实体为byte[]类型

本文介绍了如何使用Java实现对象的序列化与反序列化操作,包括将对象转换为byte[]数组的过程及从byte[]数组还原为原始对象的方法。

1、序列化

//序列化为byte[]
public static byte[] serialize(Object object) {
    ObjectOutputStream oos = null;
    ByteArrayOutputStream bos = null;
    try {
        bos = new ByteArrayOutputStream();
        oos = new ObjectOutputStream(bos);
        oos.writeObject(object);
        byte[] b = bos.toByteArray();
        return b;
    } catch (IOException e) {
        System.out.println("序列化失败 Exception:" + e.toString());
        return null;
    } finally {
        try {
            if (oos != null) {
                oos.close();
            }
            if (bos != null) {
                bos.close();
            }
        } catch (IOException ex) {
            System.out.println("io could not close:" + ex.toString());
        }
    }
}

2、反序列化

//反序列化为Object
public static Object deserialize(byte[] bytes) {
    ByteArrayInputStream bais = null;
    try {
        // 反序列化
        bais = new ByteArrayInputStream(bytes);
        ObjectInputStream ois = new ObjectInputStream(bais);
        return ois.readObject();
    } catch (IOException | ClassNotFoundException e) {
        System.out.println("bytes Could not deserialize:" + e.toString());
        return null;
    } finally {
        try {
            if (bais != null) {
                bais.close();
            }
        } catch (IOException ex) {
            System.out.println("LogManage Could not serialize:" + ex.toString());
        }
    }
}
### Java 中字符串反序列化的操作方法 在Java中,对象可以通过多种方式进行序列化反序列化。对于字符串形式的对象数据,通常会采用JSON或其他文本格式来进行传输存储。下面介绍如何通过`ObjectInputStream`以及第三方库如Jackson或Gson实现字符串的反序列化。 #### 使用 `ObjectInputStream` 当处理的是标准的Java对象流而非纯文本表示时: ```java import java.io.*; public class StringDeserializer { public static Object deserializeString(String str) throws IOException, ClassNotFoundException { byte[] data = str.getBytes(); ByteArrayInputStream bis = new ByteArrayInputStream(data); ObjectInputStream ois = new ObjectInputStream(bis); try { return ois.readObject(); // 将读取并返回原始对象实例 } finally { ois.close(); } } } ``` 需要注意的是上述方式仅适用于由` ObjectOutputStream`创建的标准Java序列化字符串,并不适合直接用于JSON等形式的数据[^1]。 #### 利用 Jackson 库进行 JSON 反序列化 更常见的情况是从JSON字符串恢复成Java对象。这里推荐使用流行的Jackson库完成此任务: ```java import com.fasterxml.jackson.databind.ObjectMapper; class UserDto { /* DTO定义 */ } // ... public class JsonDeserializerExample { private final ObjectMapper mapper = new ObjectMapper(); public <T> T fromJson(String jsonStr, Class<T> valueType) throws Exception{ return mapper.readValue(jsonStr, valueType); } } ``` 这段代码展示了怎样利用Jackson将给定类型的JSON字符串转换回相应的Java实体类实例。这种方式更加灵活通用,尤其适合跨平台间传递复杂结构的信息[^2]。 #### 处理因版本差异引起的反序列化错误 有时可能会遇到由于依赖库的不同版本而导致的兼容性问题。例如,在某些情况下升级Fastjson至最新版可以有效修复特定场景下的反序列化异常。这表明保持外部组件更新有助于减少潜在的技术债务技术难题[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值