这可能是一个非常简单的问题,
我知道byte
是java
中的原始类型,属于integer
系列,需要内存空间1 byte
。当我们处理二进制数据时(例如当我们读/写文件时),我们将数据存储到byte array
并进行操作。我怀疑的是,当我们有其他原语如short,int
时为什么这样做我们更喜欢byte[]
?任何人都可以澄清
提前致谢。
答案 0 :(得分:6)
实际使用字节数组(忽略那些本身无法使用8位数据块的计算机;我甚至不知道这些天是否存在于实际使用中)保证始终代表相同的数据字节订单,无论平台,编程语言或框架。有了存储或传输格式的知识,您可以将其转换为当前平台等使用的任何内部格式。
例如,我不相信在Alpha CPU上运行的用C ++编写的应用程序会写出unsigned long
,就像在英特尔上运行的.NET应用程序写出UInt32
一样。 (更不用说在IBM z10上运行的Java可能如何处理64位long
或PIC程序集的低32位可能会处理在I / O端口上抛出32位值的情况。如果你使用纯字节,这就成了一个问题:你必须在你读或写的地方翻译字节序列,但你会知道如何做到这一点。 定义良好。
如果您通过套接字发送数据,将其保存到文件中,或者通过使用字节数组在空间或时间中传输数据,则可以保证收件人将确切地看到发送或保留的内容。然后由收件人决定(请注意,“收件人”可能是您自己的应用程序的文件“加载”代码,而“发件人”可能是“保存”到文件中的代码)以执行对字节序列有用的操作发件人从任何恰好是其原生格式生成的。
如果使用非字节类型,则需要通过其他方式保证字节顺序,因为根据平台等,字节可能以不同的顺序解释。例如,您需要指定(自己或通过引用框架的规范)多字节整数的持久形式是使用大端还是小端。
答案 1 :(得分:2)
答案 2 :(得分:1)
如果您有一个100MB的文件并将其读入int
数组,则需要400MB内存(如果您在每个元素中读取一个字节 - 您可以将4个字节打包成一个int,但用这样的方式处理单个字节是非常困难的)。因此,除了字节是当今几乎所有计算机系统的基本最小可寻址存储单元之外,完全记忆效率是我所说的一个原因。
答案 3 :(得分:0)
byte是二进制传输大小的度量单位。如果不使用byte,那么,例如,yo不能可靠地发送1字节消息,读取3字节文件等。
另一个因素是像utf8这样的协议,其中数据序列没有在固定大小的字节边界上对齐。
答案 4 :(得分:-1)
共同使用
许多类型的应用程序使用可表示为8位或更少位的信息,处理器设计人员针对此常见用法进行了优化。主要商业计算架构的普及有助于无处不在地接受8位大小。