【发布时间】:2011-05-09 11:32:28
【问题描述】:
将java.nio.ByteBuffer a 转换为(新创建的)CharBuffer b 或char[] b 的最快方法是什么。
这样做很重要,a[i] == b[i]。这意味着,不是a[i] 和a[i+1] 一起构成一个值b[j],就像getChar(i) 会做的那样,但这些值应该是“传播”的。
byte a[] = { 1,2,3, 125,126,127, -128,-127,-126 } // each a byte (which are signed)
char b[] = { 1,2,3, 125,126,127, 128, 129, 130 } // each a char (which are unsigned)
请注意,byte:-128 与 char:128 具有相同的(低 8 位)位。因此,我假设“最好”的解释是我上面提到的,因为位是相同的。
之后我还需要反之亦然翻译:将char[] 或java.nio.CharBuffer 重新转换为java.nio.ByteBuffer 的最有效方法。
【问题讨论】:
-
你想用这个字符缓冲区做什么?如果你输入一个 2 字节的字符会发生什么?翻译后的字节数组应该是什么样子?根据您的需要,最有效的方法可能是根本不转换。
-
换句话说,您希望将
ByteBuffer的内容解释为使用 ISO-8859-1 编码的字符序列? -
假设在
char[]缓冲区中没有大于0xff的值用于反向翻译。任何行为/崩溃都可以(“未指定”)。 ISO-8859-1?据我所知,有些字节不能被任何代码页翻译(例如\0)?我认为如果你转储一个 8 位数据流,许多代码页转换库都不能很好地接受它。但我不了解 Java,我会查一下。想象一下我有图片/图像数据。 -
嗯?如果你有图片/图像数据,那你为什么要关心字符呢?也许如果您描述了您想要完成的工作,而不是您想要完成的方法,您会得到更相关的答案。
-
@towi - 那么你想要的数据类型就叫做
short
标签: java bytearray nio bytebuffer arrays