我们使用 java 原语“字节”等读取和写入二进制文件fileInputStream.read(byte)
。在更多示例中,我们看到byte[] = String.getBytes()
. 一个字节只是 8 位值。为什么我们使用byte[]
读取二进制文件?从文件或字符串读取后字节值包含什么?
3 回答
我们使用 java 原语 'byte' 之类的来读写二进制文件
fileInputStream.read(byte)
。
因为操作系统将文件建模为字节序列(或更准确地说,作为octets)。byte
类型是 Java 中八位字节的最自然表示。
为什么我们使用 byte[] 来读取二进制文件?
和以前一样的答案。但实际上,您也可以通过其他方式读取二进制文件;例如使用DataInputStream
.
从文件或字符串读取后字节值包含什么?
在第一种情况下,文件中的字节。
在第二种情况下,您不会从字符串中“读取”字节。相反,当您调用 时,String.getBytes()
您会得到组成字符串字符的字节,而这些字节是以特定字符集编码的。如果您使用 no-argsgetBytes()
方法,您将获得 JVM 的默认字符集/编码。您还可以提供一个参数来选择不同的编码。
Java 明确区分了字节(8 位)数量和字符。从概念上讲,Java 字符是 Unicode 代码点,字符串和类似的文本表示是字符序列……而不是字节序列。
(不幸的是,在实现中存在“皱纹”。在设计 Java 时,Unicode 字符空间适合 16 位;即有 <= 65536 个可识别的代码点。Java 旨在匹配这个......和char
类型被定义为 16 位无符号整数类型。但随后 Unicode 被扩展为 > 65536 个代码点,Java 留下了一个尴尬的问题,即某些 Unicode 代码点不能用一个char
值表示,而是用一对表示值char
...所谓的代理对...和Java字符串在UTF-16中有效表示。对于大多数常见字符/字符集,这无关紧要。但是如果您需要处理不寻常的字符/字符集,正确的处理字符串的方法是使用“代码点”方法。)
字符串是基于字节构建的。字节建立在位之上。这些位“物理”存储在驱动器上。
因此,它不是从驱动器中逐位读取数据,而是以较大的部分(即字节)读取。
所以 byte[] 包含原始数据。原始数据等于驱动器上存储的数据。
您最终总是读取原始数据,然后您可以应用格式化程序将这些字节转换为字符,并最终转换为在熨平板上显示的字母(如果这是一个 txt 文件)。如果您因图像而死,将读取存储有关字符颜色信息的字节。
因为最小的存储单位是字节。