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