如何在 java 中使用 utf-8 字符串而不分配新的 String 对象而是作为字节数组的一部分?
How to work with utf-8 strings in java without allocating a new String object but as part of byte array instead?
我想从包含 utf-8 字符串的二进制格式读取我的代码。
此外,我不希望在这个地方任何分配,因为它们会召唤 GC 暂停世界,这对我来说有点不好。
我可以很好地处理我的大多数基元和数组,除了字符串,因为 java 是一种“面向对象的语言”,并强调大量使用对象(= 分配)。而且它不提供在没有分配的情况下使用 utf-8 字符串的标准方法,因为它具有不可变的对象一。
所以,我需要从这些东西中得到什么——验证、提取 Char
而不是创建任何其他对象。 IE。我应该可以把这个东西放在池子或其他地方,用 data: Array[Byte]
和 offset: Int
和 length: X
初始化,不要复制。 CharIterable
能够将此对象翻新为其他字符串的东西。
那么,我应该手动完成还是有人已经完成了?
我想您可以尝试直接调用 String 在内部使用的低级库,例如 CharsetDecoder
,它可以从 ByteBuffer 解码为预分配的 CharBuffer。
但是你可能做得太过头了,我会首先衡量使用 String(和相关的对象分配)是否真的是一个问题。
我想从包含 utf-8 字符串的二进制格式读取我的代码。
此外,我不希望在这个地方任何分配,因为它们会召唤 GC 暂停世界,这对我来说有点不好。
我可以很好地处理我的大多数基元和数组,除了字符串,因为 java 是一种“面向对象的语言”,并强调大量使用对象(= 分配)。而且它不提供在没有分配的情况下使用 utf-8 字符串的标准方法,因为它具有不可变的对象一。
所以,我需要从这些东西中得到什么——验证、提取 Char
而不是创建任何其他对象。 IE。我应该可以把这个东西放在池子或其他地方,用 data: Array[Byte]
和 offset: Int
和 length: X
初始化,不要复制。 CharIterable
能够将此对象翻新为其他字符串的东西。
那么,我应该手动完成还是有人已经完成了?
我想您可以尝试直接调用 String 在内部使用的低级库,例如 CharsetDecoder
,它可以从 ByteBuffer 解码为预分配的 CharBuffer。
但是你可能做得太过头了,我会首先衡量使用 String(和相关的对象分配)是否真的是一个问题。