【发布时间】:2011-11-06 02:56:14
【问题描述】:
如果我用byte[] 创建一个字节数组,每个元素的大小是多少?它们可以调整大小/合并吗?
谢谢,
【问题讨论】:
如果我用byte[] 创建一个字节数组,每个元素的大小是多少?它们可以调整大小/合并吗?
谢谢,
【问题讨论】:
不知道你所说的调整大小和合并是什么意思
来自文档:
byte: byte 数据类型是一个 8 位有符号二进制补码整数。它的最小值为 -128,最大值为 127(含)。字节数据类型可用于在大型数组中节省内存,其中内存节省实际上很重要。它们也可以用来代替 int ,它们的限制有助于澄清您的代码;变量的范围有限这一事实可以作为一种文档形式。
编辑:如果通过调整大小/合并您谈论的是数组本身,那么与其他数组相比,字节数组并没有什么特别之处。
【讨论】:
有两种分配数组的方法。
A) 分配给定大小的空数组:
byte[] ba1 = new byte[18]; // 18 elements
B) 通过指定内容来分配数组
byte[] ba2 = {1,2,3,4,5}; // 5 elements
【讨论】:
byte[] ba2 = {1,2,3,4,5}; // 5 elements,它是否将int 1 转换为bites 并将其存储在ba2[0] 中?其余元素也一样吗?我可以在其中存储实际位,例如 10010101 吗?
byte b = 0b10010101。在以前的版本中,只有十进制、八进制和十六进制值的文字
byte[] s = { 127 } 是合法的,而byte[] s = { 128 } 是不合法的。
大小将是每个元素一个字节。
它们不能重新调整大小。但是,您可以使用 System.arrayCopy() 自己合并它们,方法是创建一个新数组并将源数组复制到新数组中。
编辑 1:
还有一个 8 字节的对象头开销和一个 4 字节的数组长度开销,总开销为 12 个字节。所以小数组比较贵。
查看GNU Trove 和Fastutil。它们是使处理原始集合更容易的库。
编辑 2:
我在您的回复中读到您正在执行对象序列化。您可能对 ByteBuffers 感兴趣。这些使得将各种原始类型写入包装数组并获得结果数组变得容易。如果您想要轻松序列化结构化数据类型,还可以查看Google protocol buffers。
【讨论】: