gpt4 book ai didi

java - java.nio.charset.Charset.decode(..)/encode(..) 的快速替代品

转载 作者:搜寻专家 更新时间:2023-11-01 01:39:04 27 4
gpt4 key购买 nike

有人知道一种更快的方法来完成 java.nio.charset.Charset.decode(..)/encode(..) 的功能吗?

这是我目前使用的技术的瓶颈之一。

[编辑]具体来说,在我的应用程序中,我将一个部分从 java 解决方案更改为 JNI 解决方案(因为有一种 C++ 技术比我使用的 Java 技术更适合我的需求)。

此更改导致速度显着下降(并且 cpu 和内存使用量显着增加)。

深入研究我使用的 JNI 解决方案,java 应用程序通过 byte[] 与 C++ 应用程序通信。这些 byte[] 由 Charset.encode(..) 从 java 端生成并传递给 C++ 端。然后当 C++ 响应一个 byte[] 时,它通过 Charset.decode(..) 在 Java 端被解码。

针对分析器运行此程序,我发现 Charset.decode(..) 和 Charset.encode(..) 与 JNI 解决方案的整个执行时间相比都花费了相当长的时间(我只分析了 JNI -解决方案,因为它是我可以很快想到的东西。一旦我腾出时间,我将在稍后的日期分析整个应用程序 :-) )。

进一步阅读我的问题后,它似乎是 Charset.encode(..) 和 decode(..) 的一个已知问题,它正在 Java7 中得到解决。但是,由于某些限制,迁移到 Java7 对我来说(目前)不是一个选择。

这就是为什么我在这里问是否有人知道 Java5 解决方案/替代方案(抱歉,应该早点提到这是针对 Java5 的)? :-)

最佳答案

encode()decode() 的 javadoc 清楚地表明这些是方便的方法。例如,对于 encode() :

Convenience method that encodes Unicode characters into bytes in this charset.

An invocation of this method upon a charset cs returns the same result as the expression

 cs.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE)
.encode(bb);

except that it is potentially more efficient because it can cache encoders between successive invocations.

那里的语言有点模糊,但不使用这些便捷方法可能会提高性能。创建和配置编码器一次,然后重新使用它:

 CharsetEncoder encoder = cs.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);

encoder.encode(...);
encoder.encode(...);
encoder.encode(...);
encoder.encode(...);

阅读 javadoc 总是值得的,即使您认为自己已经知道答案。

关于java - java.nio.charset.Charset.decode(..)/encode(..) 的快速替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2098137/

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