我们使用java原语'byte' fileInputStream.read(byte)等读取和写入二进制文件.在另一个例子中我们看到byte[] = String.getBytes().一个字节只是8位值.为什么我们byte[]用来读二进制文件?从文件或字符串读取后,字节值包含什么?
我们使用java原语'byte'
fileInputStream.read(byte)等读写二进制文件.
因为操作系统将文件建模为字节序列(或更准确地说,作为八位字节).该byte类型是Java中八位字节的最自然表示.
为什么我们使用byte []来读取二进制文件?
和以前一样的答案.实际上,您也可以通过其他方式读取二进制文件; 例如使用DataInputStream.
从文件或字符串读取后,字节值包含什么?
在第一种情况下,文件中的字节.
在第二种情况下,您不会从String中"读取"字节.相反,当你调用时,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"方法.)