1
31
“UTF-16”字符集名称将始终使用BOM进行编码,并将使用大/小尾端对数据进行解码,但“UnicodeBig”和“UnicodeLittle”对于以特定字节顺序进行编码非常有用。使用UTF-16LE或UTF-16BE表示无BOM- see this post 了解如何使用“\uFEFF”手动处理BOM。看见 here Charset 班还要注意的是,只有 limited subset of encodings |
2
7
它当然应该更快,但我不知道它在封面下制作了多少个数组,但我对API的理解是,它应该最小化这一点。 |
3
6
首先,对于解码,可以使用字符集“UTF-16”;自动检测初始BOM表的。对于UTF-16BE编码,您还可以使用“UTF-16”字符集-这将编写一个正确的BOM表,然后输出big-endian内容。 对于使用BOM编码到little endian,我不认为您当前的代码太糟糕,即使使用了双重分配(除非您的字符串真的很可怕)。如果它们不是处理字节数组,而是处理java.nio ByteBuffer,并使用java.nio.charset.CharsetEncoder类,那么您可能需要做的是。(您可以从Charset.forName(“UTF-16LE”).newEncoder()获得)。 |
4
3
在看到您的评论之前,我写了上述内容,我认为使用nio类的答案是正确的。我已经看过了,但是我对API还不太熟悉,不知道您是如何做到这一点的。 |
5
0
以下是我最终得到的结果:
|