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 快得多。
为什么 str.getbytes 比 charset.encode
快
在这两个选项之间做出选择的决定因素是什么?
测试结果:getBytes() 方法耗时 1328 毫秒,而 charset.encode() 耗时 1804 毫秒
result of testing with sample program
- 使用
ArrayEncoder
和 getBytes()
的字符集 UTF_8
具有快速路径。
Charset.encode
总是将参数包装为 CharBuffer
和 return 一个 ByteBuffer
而不是 byte[]
,并且它正在使用编码器缓存。 String.getBytes
始终创建一个新的 CharsetEncoder
并使用 char[]
进行编码,并且它具有 ArrayEncoder
. 的快速路径
此外,ArrayEncoder
也是char[]
到byte[]
编码的快速路径编码器。
但是,在大多数应用程序中不应考虑此性能。
何时使用 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 快得多。
为什么 str.getbytes 比 charset.encode
快在这两个选项之间做出选择的决定因素是什么?
测试结果:getBytes() 方法耗时 1328 毫秒,而 charset.encode() 耗时 1804 毫秒
result of testing with sample program
- 使用
ArrayEncoder
和getBytes()
的字符集UTF_8
具有快速路径。 Charset.encode
总是将参数包装为CharBuffer
和 return 一个ByteBuffer
而不是byte[]
,并且它正在使用编码器缓存。String.getBytes
始终创建一个新的CharsetEncoder
并使用char[]
进行编码,并且它具有ArrayEncoder
. 的快速路径
此外,ArrayEncoder
也是char[]
到byte[]
编码的快速路径编码器。
但是,在大多数应用程序中不应考虑此性能。