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

Posted

技术标签:

【中文标题】字节数组是啥意思? [关闭]【英文标题】:What do we mean by Byte array? [closed]字节数组是什么意思? [关闭] 【发布时间】:2011-04-30 12:12:57 【问题描述】:

谁能解释一下,我不太明白这个概念。

什么是字节数组?

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

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

【问题讨论】:

我想这是有道理的;因为如果您阅读 Java I/O 类;例如字节数组输入流;字节数组输出流。除非了解 ByteArray,否则如何明确 ByteArrayInputStream、ByteArrayOutputStream 的含义? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

来自wikipedia:

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

所以当你说字节数组时,你指的是一个定义长度(例如元素数量)的数组,其中包含字节(8 位)大小的元素的集合。

在 C# 中,字节数组可能如下所示:

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

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

【讨论】:

【参考方案3】:

一个字节是 8 位(二进制数据)。

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

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

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

【讨论】:

为了变得非常迂腐,一个字节不保证是 8 位。这当然是当今事实上的标准,但从历史上看,情况并非总是如此。 en.wikipedia.org/wiki/Byte @JaredPar:准确,但我认为每次有人声明一个字节是 8 位时都需要免责声明有点矫枉过正。 @Dinah,我同意,这就是我添加迂腐免责声明的原因。我今天刚好在看相关页面。 你能不能给The downside to this is that the entire file contents must be loaded into memory.一些亮光? @JeffOrris 不确定“转换为字节数组” 是什么意思。这不是你通常会做的事情。另外,“不易受攻击” 对什么?

以上是关于字节数组是啥意思? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中函数memset()是啥意思?啥功能

java中getBytes方法得到的字节数组里面每一个byte代表的是啥?

比较两个字节数组的最快方法是啥?

在opencv中使用imshow显示字节数组的最快方法是啥?

将 3 维字节数组转换为单字节数组 [关闭]

从 C++ 中的字节数组中提取非零索引的最快方法是啥