这可能是一个很简单的问题,
我知道这byte
是一个原始类型java
,属于integer
家庭并且需要1 byte
内存中的空间。当我们处理二进制数据时(例如,当我们读/写文件时),我们将数据存储到byte array
其中并进行操作,我的疑问是当我们有其他原语时,比如short,int
我们为什么更喜欢byte[]
?谁能澄清
提前致谢。
这可能是一个很简单的问题,
我知道这byte
是一个原始类型java
,属于integer
家庭并且需要1 byte
内存中的空间。当我们处理二进制数据时(例如,当我们读/写文件时),我们将数据存储到byte array
其中并进行操作,我的疑问是当我们有其他原语时,比如short,int
我们为什么更喜欢byte[]
?谁能澄清
提前致谢。
使用字节数组实际上(忽略不能原生处理 8 位数据块的计算机;我什至不知道这些天在实际使用中是否存在)保证始终以相同的顺序表示数据字节,不管平台、编程语言或框架。鉴于存储或传输格式的知识,您可以将其转换为您当前平台等使用的任何内部格式。
例如,我不相信在 Alpha CPU 上运行的用 C++ 编写的应用程序会unsigned long
以与在 Intel 上运行的 .NET 应用程序写出 a 的方式相同UInt32
(更不用说在 IBM z10 上运行的 Java 可能会如何)处理 64 位long
或 PIC 程序集的低 32 位可能会处理在 I/O 端口抛出 32 位值)。如果您使用纯字节,这不是问题:您必须在任何地方读取或写入字节序列,但您将确切地知道如何做到这一点。它定义明确。
如果您通过套接字发送数据,将其保存到文件中,或者以其他方式在空间或时间上传输数据,则通过使用字节数组,您可以保证接收者将准确地看到发送或保存的内容。然后由接收者(请注意,“接收者”可能是您自己的应用程序的文件“加载”代码,而“发送者”可能是“保存”到文件的代码)对字节序列做一些有用的事情发件人从恰好是其本机格式的任何内容中生成。
如果您使用的是非字节类型,则需要通过其他方式保证字节顺序,因为取决于平台等,字节可能以不同的顺序解释。例如,您需要指定(您自己或通过参考框架规范)多字节整数的持久形式是使用大端还是小端。
像文件和套接字这样的流被建模为字节,即字节[]。有一些文件格式实际上是 16 位值或 32 位值等,但这些都是原生的,只是字节。
If you had a 100MB file and read it into an array of int
you would need 400MB of memory (if you read one byte into each element - you could pack 4 bytes into one int but it would be very difficult to work with individual bytes that way). So outright memory efficiency is one reason I'd say, on top of the reason that bytes are the fundamental smallest addressable unit of memory of almost all computer systems today.
byte is the unit of measure of the size of binary transfer. If you do not use byte, then, for example, yo can not reliably send a 1 byte message, read a 3 byte file, etc.
Another factor is protocols like utf8, where data sequences are not aligned on a fixed-size byte boundary.
常用的
许多类型的应用程序使用以八位或更少位表示的信息,处理器设计人员针对这种常见用途进行了优化。主要商业计算架构的流行有助于普遍接受 8 位大小。