gpt4 book ai didi

java - 有什么技术原因不在 Java 中使用 StandardCharsets 吗?

转载 作者:行者123 更新时间:2023-11-29 08:44:44 29 4
gpt4 key购买 nike

从 Java 1.7 开始,StandardCharsets 是标准库的一部分,但我使用了很多在实现之前编写好的遗留代码。每当我遇到它时,我都会用 StandardCharsets 替换它(主要是为了使代码更漂亮/更干净),但我担心在具有性能关键部分或我无法轻松调试的区域进行这些更改。

不使用标准字符集是否有任何技术原因?比如,使用 StandardCharsets 而不是 Guava 字符集或诸如 getBytes("UTF-8") 之类的东西是否会导致“陷阱”或效率低下?我知道“这些字符集保证在 Java 平台的每个实现上都可用。”,但我不知道它们是否更慢或有旧方法没有的怪癖。

为了尽量保持这个主题,假设没有主观力量影响它,比如其他开发人员的偏好、对改变的抵制等。

此外,如果它有任何影响的话,UTF-8 是我真正关心的编码。

最佳答案

As in, are there 'gotchas' or inefficiencies that might arise from using StandardCharsets instead of Guava charsets or something like getBytes("UTF-8")?


首先,java.nio.charset.StandardCharsets.UTF_8(在OpenJDK/Oracle JDK中实现),com.google.common.base.Charsets.UTF_8org.apache.commons.io.Charsets.UTF_8 的实现完全相同:

public static final Charset UTF_8 = Charset.forName("UTF-8");

因此,至少,您不必担心与 Guava 字符集或 Charset.forName("UTF-8") 的差异。


至于 String.getBytes(String)String.getBytes(Charset),我确实在文档中看到了不同之处:

  • 对于 String.getBytes(Charset):“此方法总是用此字符集的默认替换字节数组替换格式错误的输入和不可映射的字符序列。”。
  • 对于 String.getBytes(String):“未指定此字符串无法在给定字符集中编码时此方法的行为。”。

因此,根据您使用的 JRE,我预计 someString.getBytes("UTF-8")someString.getBytes 在处理不可映射字符方面可能存在差异(StandardCharsets.UTF_8)

关于java - 有什么技术原因不在 Java 中使用 StandardCharsets 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167375/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com