【发布时间】:2022-01-11 21:09:40
【问题描述】:
有没有办法从 char[] 创建一个字符串而不复制它?
从下面的截图中可以看到(取自 JDK 1.8 中的 String 类):
实现这一点的构造函数是私有的且不可访问。也许有任何解决方法?因为我需要不复制 char[] 来提高性能。
对于上下文:我正在研究 YAML/DYML 解析器,其中每百分之一毫秒都很重要。这是代码(它的 WIP):https://github.com/Osiris-Team/Dream-Yaml/blob/main/src/main/java/com/osiris/dyml/DYReaderV2.java
【问题讨论】:
-
没有。因为
String是不可变的。您也许可以针对char[]实施CharSequence- 例如docs.oracle.com/javase/8/docs/api/java/nio/… -
@OsirisTeam 你认为这是为什么?这是“秘方”。我可以把秘制酱汁放在你的汉堡上,但我永远不会告诉你怎么做。这是一个包私有方法。只有
java.lang包的成员才有足够的权限访问该构造函数。或者,您可以通过调用可以在内部访问它的公共构造函数来获取结果。 -
如果您充分解释您的情况,可以建议适当的解决方案。挂在不适合您使用的构造函数上是没有用的。您如何获取数据,您将其用于什么用途(即您是否需要将其作为
String而不是例如流式解决方案)。 -
您采用了哪些性能指标来确定这个特定的 String 构造函数是您的问题?如果此处的更改比更仔细地使用 List、Map、数据库或文件操作产生更大的影响,那将是令人惊讶的。
-
请不要向我们展示您的代码的屏幕截图。将代码复制并粘贴到问题中作为文本。