Java 如何避免与String.getBytes(Charset ch)相关的开销

Java 如何避免与String.getBytes(Charset ch)相关的开销,java,performance,character-encoding,Java,Performance,Character Encoding,使用String.getBytes(Charset ch)分配一个新的缓冲区,实际上它返回一个byte[]。有没有办法避免这种情况?我希望有一个可重用的字节数组,并在这个缓冲区中对字符串进行编码。您可以直接使用Charset和CharsetEncoderAPI,尤其是调用。但是,我不希望它最终成为特别令人愉快的代码。如果你像我一样是一个不精通ByteBuffer的人,为了补充Jon的答案,你也可以创建自己的OutputStream实现,包装你的字节数组,并使用OutputStreamWriter

使用
String.getBytes(Charset ch)
分配一个新的缓冲区,实际上它返回一个
byte[]
。有没有办法避免这种情况?我希望有一个可重用的字节数组,并在这个缓冲区中对字符串进行编码。

您可以直接使用
Charset
CharsetEncoder
API,尤其是调用。但是,我不希望它最终成为特别令人愉快的代码。

如果你像我一样是一个不精通ByteBuffer的人,为了补充Jon的答案,你也可以创建自己的OutputStream实现,包装你的字节数组,并使用
OutputStreamWriter
将字符串写入您可以使用的自定义
OutputStream

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

//Copies characters from this string into the destination character array.

自己管理数组。

在你走这条路线之前,你有没有明确的性能测量结果,这表明这对你来说是个重要的问题?我来C++,分配对我来说是个祸害,但过早优化是个更大的祸害……我需要它来解码来自tcp/ip自定义协议的数据,该协议可以高速运行。我可以猜测,为每个数据包分配一个或多个分配可能不是最好的。当然,在原型阶段,这一点都不重要。事实上,当我从C++中看到这种事情时,我开始担心很多,开始寻求解决方案,你是对的,过早优化是邪恶的,但是讨论堆栈溢出不是!不进行任何编码的数据—这是在复制字符。我认为这是不推荐的,但是它写入的是char[],而不是byte[],因此根本没有编码。
getBytes
使用相同的参数是不推荐的
getChars
不是。但是是的,我忘记了编码部分。。。