字节数组是什么意思?[关闭]


103

有人可以解释一下,我不完全理解这个概念。

什么是字节数组?

在应用程序/程序中何时何地使用它?

使用字节数组的优缺点是什么?


我想这很有道理;因为如果您阅读Java I / O类;例如ByteArrayInputStream; ByteArrayOutputStream。除非人们了解ByteArray,否则如何澄清ByteArrayInputStream,ByteArrayOutputStream的含义?
CuriousMind

Answers:


74

字节为8位(二进制数据)。

字节数组是字节数组(重言语FTW!)。

您可以使用字节数组来存储二进制数据的集合,例如文件的内容。缺点是必须将整个文件内容加载到内存中。

对于大量的二进制数据,如果您的语言支持,最好使用流数据类型。


16
为了获得极高的学趣,不能保证一个字节为8位。当然,这是当今的事实上的标准,但从历史上看,并非总是如此。 en.wikipedia.org/wiki/Byte
JaredPar

14
@JaredPar:准确,但是我认为每当有人声明一个字节为8位时都需要一个免责声明会有点过头。
黛娜2010年

6
@Dinah,我同意,这就是为什么我添加了书呆子免责声明的原因。我刚好在看今天的相关页面。
JaredPar

6
你能给点灯The downside to this is that the entire file contents must be loaded into memory.吗?
CodeYogi 2015年

1
@JeffOrris不确定“转换为字节数组”的含义。那不是您通常要做的。还有,“弱势群体”要做什么?
菲尔(Phil)

56

我假设您知道字节是什么。字节数组只是包含一组连续(并排)字节的内存区域,因此按顺序讨论它们是有意义的:第一个字节,第二个字节等。

就像字节可以编码不同类型和范围的数据一样(数字从0到255,数字从-128到127,使用ASCII的单个字符,例如'a'或'%',CPU操作码),字节数组中的每个字节可能是这些中的任何一个,或有助于某些多字节值,例如范围较大的数字(例如,从0..65535开始的16位无符号整数),国际字符集,文本字符串(“ hello”)或part /所有已编译的计算机程序。

字节数组的关键在于,它可以对存储在该内存部分中的每个8位值进行索引(快速),精确的原始访问,并且可以对这些字节进行操作以控制每个位。坏事是计算机只是将每个条目视为一个独立的8位数字-这可能是您的程序要处理的,或者您可能更喜欢一些强大的数据类型,例如跟踪其自身长度并不断增长的字符串根据需要,或者是一个浮点数,可以让您存储3.14,而无需考虑按位表示。作为一种数据类型,在长数组的开头附近插入或删除数据效率很低,因为所有后续元素都需要重新组合以填补或填补所创建/需要的空白。


1
很好的解释!!!
Sundararaj Govindasamy

11

来自维基百科

在计算机科学中,数组数据结构或简单的数组是由一组元素(值或变量)组成的数据结构,每个元素由一个或多个整数索引标识,并存储起来,以便可以从其索引中计算出每个元素的地址通过简单的数学公式计算元组。

因此,当您说字节数组时,您指的是某个定义的长度(例如元素数)的数组,其中包含字节(8位)大小的元素的集合。

在C#中,字节数组可能类似于:

byte[] bytes = { 3, 10, 8, 25 };

上面的示例定义了一个由4个元素组成的数组,其中每个元素的长度最多为Byte

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.