getBytes和Serialize与String之间的区别是什么?

时间:2013-05-26 01:15:00

标签: java string serialization redis

正如标题所说,我getBytes[]serialization mechanism的{​​{1}}不同String。以下是getBytes[]serialization mechanism之间的测试:

    public void testUTF() {

        byte[] data = SerializeUtil.serUTFString(str);
        System.out.println(data.length);
        System.out.println(str.getBytes().length);
    }

以下是SerializeUtil

public static byte [] serUTFString(String data){

byte[] result = null;
ObjectOutputStream oos = null;
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
try {
    oos = new ObjectOutputStream(byteArray);
    try {
        oos.writeUTF(data);
        oos.flush();
        result = byteArray.toByteArray();
    } finally {
        oos.close();
    }
} catch (Exception e) {
    e.printStackTrace();
}

return result;

}

当我将str设置为Redis时,两者都可以正常工作,但getBytes[]似乎更有效。由于它们都从byte array返回String,所以差异是serialization是必要的吗?

1 个答案:

答案 0 :(得分:2)

String.getBytes()返回一个字节数组,以默认编码方式重新表示字符串字符。 ObjectOutputStream.writeUTF以修改后的UTF-8格式写入字符串长度,然后写入字节,请参阅java.io.DataOutput API。