0

我们使用 java 原语“字节”等读取和写入二进制文件fileInputStream.read(byte)。在更多示例中,我们看到byte[] = String.getBytes(). 一个字节只是 8 位值。为什么我们使用byte[]读取二进制文件?从文件或字符串读取后字节值包含什么?

4

3 回答 3

5

我们使用 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中有效表示。对于大多数常见字符/字符集,这无关紧要。但是如果您需要处理不寻常的字符/字符集,正确的处理字符串的方法是使用“代码点”方法。)

于 2013-11-04T09:11:20.083 回答
2

字符串是基于字节构建的。字节建立在位之上。这些位“物理”存储在驱动器上。

因此,它不是从驱动器中逐位读取数据,而是以较大的部分(即字节)读取。

所以 byte[] 包含原始数据。原始数据等于驱动器上存储的数据。

您最终总是读取原始数据,然后您可以应用格式化程序将这些字节转换为字符,并最终转换为在熨平板上显示的字母(如果这是一个 txt 文件)。如果您因图像而死,将读取存储有关字符颜色信息的字节。

于 2013-11-04T09:07:44.287 回答
-1

因为最小的存储单位是字节。

于 2013-11-04T09:07:35.657 回答