【发布时间】:2019-06-25 02:00:59
【问题描述】:
我知道字节是Java IO的底层数据类型,但是为什么字节用于读取和写入,因为它的最大值范围是-128到127。这个范围是整数,整数如何用于读取和写入不同的符号字符还是二进制数据?
期望是理解为什么字节数据类型用于Java IO。
【问题讨论】:
-
你会用什么代替?在最底层,文件是大多数现代操作系统中的字节序列。例如,文本是通过将字符编码为每个字符一个或多个字节的序列来处理的。
-
显而易见的选择是无符号字节。许多人认为 Java 中没有它是一个严重的设计缺陷。但是在它没有的情况下,除了有符号字节,你还能使用什么?
-
@Animesh:您是在问为什么 Java 的
byte数据类型具有特定范围 -128 到 127,或者更基本的问题是什么是“字节”以及为什么要制作“二进制数据”最多“字节”?后一个问题并非特定于 Java。 “整数如何用于读写不同的符号字符或二进制数据”这句话似乎暗示了后一个问题,这是一个非常基础的问题。 -
@Animesh:从历史上看,“字节”、“字符”和“机器字”之间的关系都有些流动,硬件仍然存在于那些具有不寻常大小的地方。 (请参阅Is a byte always 8 bits?)POSIX 标准化“字节”以准确表示一组 8 位。在现代硬件中,字节是内存的最小可寻址单元,尽管可能难以访问与机器字大小(现在通常为 32 或 64 位)不自然对齐的字节。 Java 遵循 POSIX 并将
byte设为 8 位值。 -
@Animesh:尽管历史上一个字节的大小与文本字符的大小相关联,但 Java 实际上打破了 C 的传统,使
byte和char大小不同。 Java 采用了当时最新的 Unicode 1.0 文本编码标准,并将char设为 16 位无符号值。 (Unicode 已经超过了 BMP,现在 16 位字符很难使用,但 25 年前这似乎是个好主意。)根据您的字符编码,单个字符可能占用多达 6 个字节或更多如果您添加变音符号。
标签: java