【问题标题】:Java String encodingJava 字符串编码
【发布时间】:2014-10-29 11:48:05
【问题描述】:

有什么区别

"hello world".getBytes("UTF-8");

 Charset.forName("UTF-8").encode("hello world").array();

? 在大多数情况下,第二个代码会生成一个末尾为 0 字节的字节数组。

【问题讨论】:

    标签: java string encoding


    【解决方案1】:

    您的第二个 sn-p 使用 ByteBuffer.array(),它只返回支持 ByteBuffer 的数组。这可能比写到ByteBuffer 的内容要长。

    基本上,如果您想从String 获得byte[],我会使用第一种方法:) 您可以使用其他处理ByteBuffer 的方法将其转换为@ 987654328@,但鉴于String.getBytes(Charset) 可用且方便,我就使用它...

    ByteBuffer 中检索字节的示例代码:

    ByteBuffer buffer = Charset.forName("UTF-8").encode("hello world");
    byte[] array = new byte[buffer.limit()];
    buffer.get(array);
    System.out.println(array.length); // 11
    System.out.println(array[0]);     // 104 (encoded 'h')
    

    【讨论】:

    • 刚刚观察到byte[] b1 = "hello world".getBytes("UTF-8");byte[] b2 = Charset.forName("UTF-8").encode("hello world").array();b1.length 打印出 11,b2.length 打印出 12。
    • @Sandeep:是的,因为ByteBuffer 可能已经分配了一个长度为 12 的后备数组。如果你在 ByteBuffer 上调用limit(),你只会得到 11 个字节...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2016-06-17
    • 2014-02-26
    • 2014-03-01
    • 2013-10-19
    相关资源
    最近更新 更多