序列化对象,解析为String并反序列化

Gui*_*lle 2 java serialization

我正在尝试序列化和对象,解析为String并反序列化,但它不起作用.当我将byte []解析为String或反之时,我想我错过了一些东西.

String obj = new String(SerializationUtils.serialize(configuration));
Configuration test = (Configuration)SerializationUtils.deserialize(obj.getBytes());
Run Code Online (Sandbox Code Playgroud)

为什么不起作用?

我收到此错误:

org.apache.commons.lang.SerializationException: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
    at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:168)
    at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:193)
Run Code Online (Sandbox Code Playgroud)

解:

将字节[]编码并加载到Base64

f1s*_*1sh 5

添加信息后,这很容易回答.

序列化数据是一个字节数组,但您在String对象中包装.String对象具有自己的魔力 - 在这种情况下使用UTF8-Charset.

UTF8类似于BOM("字节顺序标记"),它用作String对象的内部标题.这个BOM(由数据组成EF BB BF,它被定义为那样.请注意,它与您的异常中的数据完全相同!)是String的字节的一部分(前三个字节是准确的).这会扰乱反序列化,因为对于该deserialize方法,这3个字节是垃圾.

这就是你得到例外的原因.

我强烈建议不要将String其用作原始二进制数据的容器,例如序列化数据byte[].

由于您说远程系统只允许String,因此尝试使用不是UTF8的不同字符集创建创建String或找到禁用BOM的方法.