Java 字节数组是什么意思?

Java 字节数组是什么意思?,java,arrays,computer-science,Java,Arrays,Computer Science,有人能解释一下吗,我不太明白这个概念 什么是字节数组 我们在应用程序/程序中何时何地使用它 使用字节数组的优点和缺点是什么?一个字节是8位(二进制数据) 字节数组是字节数组(同义反复FTW!) 您可以使用字节数组来存储二进制数据的集合,例如,文件的内容。这样做的缺点是必须将整个文件内容加载到内存中 对于大量二进制数据,如果您的语言支持,最好使用流式数据类型。来自: 在计算机科学中,一种数组数据 结构或简单的数组是一个数据 由集合组成的结构 元素(值或变量)的定义, 每个由一个或多个整数标识 索引

有人能解释一下吗,我不太明白这个概念

什么是字节数组

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

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

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

字节数组是字节数组(同义反复FTW!)

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

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

来自:

在计算机科学中,一种数组数据 结构或简单的数组是一个数据 由集合组成的结构 元素(值或变量)的定义, 每个由一个或多个整数标识 索引,存储为 每个元素都可以从其 用简单的数学方法索引元组 公式

因此,当你说字节数组时,你指的是一个定义长度(例如元素数)的数组,它包含一组字节(8位)大小的元素

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

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

上面的示例定义了一个由4个元素组成的数组,其中每个元素的长度最多可达一个字节。

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

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


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

要变得非常迂腐,字节不能保证为8位。这当然是今天事实上的标准,但历史上并非总是如此@贾雷德帕:准确,但我认为,如果每次有人说一个字节是8位时都需要一个免责声明,那就有点过分了。@Dinah,我同意,这就是我添加迂腐免责声明的原因。我今天碰巧看到了相关的页面。你能解释一下
吗?缺点是整个文件内容都必须加载到内存中。
?@jefferris不确定你说的“转换为字节数组”是什么意思。这不是你通常会做的事情。还有,“不易受伤害”什么?我想这是有道理的;因为如果您阅读Java I/O类;例如,ByteArrayInputStream;ByteArrayOutputStream。除非你理解ByteArray,否则你如何澄清ByteArrayInputStream,ByteArrayOutputStream的意思?非常好的解释!!!