String.getBytes() 比 charset.encode 快

String.getBytes() faster than charset.encode

何时使用 String.getBytes("") 和 Charset.enocde(String)?

a) 字符串获取字节的用法 return "testingtestingtestingtesting".getBytes(StandardCharsets.UTF_8);

b) 字符集编码的用法
字符集字符集 = Charset.forName(StandardCharsets.UTF_8.toString()); return charset.encode("testingtestingtestingtestingtesting").array()

快速测试表明 str.getbytes 比 charset.encode 快得多。

  1. 为什么 str.getbytes 比 charset.encode

  2. 在这两个选项之间做出选择的决定因素是什么?

测试结果:getBytes() 方法耗时 1328 毫秒,而 charset.encode() 耗时 1804 毫秒

result of testing with sample program

  1. 使用 ArrayEncodergetBytes() 的字符集 UTF_8 具有快速路径。
  2. Charset.encode 总是将参数包装为 CharBuffer 和 return 一个 ByteBuffer 而不是 byte[],并且它正在使用编码器缓存。 String.getBytes 始终创建一个新的 CharsetEncoder 并使用 char[] 进行编码,并且它具有 ArrayEncoder.
  3. 的快速路径

此外,ArrayEncoder也是char[]byte[]编码的快速路径编码器。

但是,在大多数应用程序中不应考虑此性能。