【问题标题】:What's the difference between getBytes and serialize with String?getBytes 和使用 String 序列化有什么区别?
【发布时间】:2013-05-21 06:11:38
【问题描述】:

正如标题所说,getBytes[]serialization mechanismString 没有区别。下面是getBytes[]serialization mechanism 之间的测试:

    public void testUTF() {

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

这里是SerializeUtil

公共静态字节[] serUTFString(字符串数据) {

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[] 似乎更有效率。既然他们都从String返回一个byte array,那么有什么区别,serialization是必要的吗?

【问题讨论】:

  • 您肯定发现字节数组的长度不同并且包含不同的数据?

标签: java string serialization redis


【解决方案1】:

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

【讨论】:

  • +1。 ObjectOutputStream 还编写了一个流标头供 ObjectInputStream. 使用,因为 OP 没有调用 writeObject,所以使用 ObjectOutputStream 而不是 DataOutputStream 是没有意义的。
  • 但是如果我在 ObjectOutputStream 中用 writeBytes(String) 替换 writeUTF 会怎样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2016-03-26
  • 2021-12-21
  • 2012-05-21
  • 2011-10-25
  • 2019-02-05
相关资源
最近更新 更多