这个问题是出于好奇而不是任何迫切需要而提出的。我找到了一些将对象转换为字节数组的代码(我当时认为我需要它)。
使用 commons-codec 我注意到纯字节数组的编码十六进制字符串表示与我通过下面的“toByteArray”方法传递字节数组时得到的不同。我注意到较长的版本以较短的十六进制字符串表示形式结束。
本能地这似乎不对,为什么会发生这种情况?
通过“toByteArray”转换方法找到的额外字节代表什么?
我猜这与编码有关?
非常感谢,我希望这不是一个新手问题。
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import org.apache.commons.codec.binary.Hex;
public class Test {
public static void main(String[] args) throws IOException {
byte[] bytes = "Stackoverflow".getBytes();
System.out.println(Hex.encodeHexString(bytes));
System.out.println(Hex.encodeHexString(toByteArray(bytes)));
}
public static byte[] toByteArray(Object obj) throws IOException {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray();
return bytes;
}
}
结果
537461636b6f766572666c6f77 aced0005757200025b42acf317f8060854e002000078700000000d537461636b6f766572666c6f77