gpt4 book ai didi

java - 虽然 write() 中将 byteval 声明为整数,但为什么 Java I/O 流中只将低位八位写入文件

转载 作者:行者123 更新时间:2023-11-30 03:43:24 26 4
gpt4 key购买 nike

摘自Herbert Schildt关于Java的书中给出的摘要。

要写入文件,可以使用 FileOutputStream 定义的 write( ) 方法。其最简单的形式如下所示:

void write(int byteval) throws IOException

此方法写入byteval指定的字节 到文件。尽管byteval被声明为整数,但只有低八位被写入文件。

这是否意味着只能写出 2^8 = 256 种组合。如果我们必须包含扩展 ASCIIUnicode 该怎么办?

其次,

Java 定义了两种类型的:字节字符>。字节流提供了处理字节输入和输出的便捷方法。例如,在读取或写入二进制数据时使用字节流。字符流提供了处理字符输入和输出的便捷方法。它们使用 Unicode,因此可以国际化。此外,在某些情况下,字符流比字节流更有效。

At the lowest level, all I/O is still byte-oriented. The character-based streams simply provide a  
convenient and efficient means for handling characters.

使用print( )println( ) 可以最轻松地完成控制台输出。这些方法由类 PrintStream 定义(该类是 对象 引用的类型 >System.out)。尽管System.out是一个字节流,但使用它进行简单的程序输出仍然是可以接受的。由于 PrintStream 是从 OutputStream 派生的输出流,因此它还实现了低级方法 write ()。因此,write( ) 可用于写入控制台。由 PrintStream 定义的 write( ) 最简单形式如下所示:

void write(int byteval)

此方法将 byteval 指定的字节写入流。尽管 byteval 被声明为整数,但仅写入低八位。下面是一个简短的示例,它使用 write( ) 将字符“A”后跟换行符输出到屏幕:

class WriteDemo {

public static void main(String args[]) {

int b;
b = 'A';
System.out.write(b);
System.out.write('\n');
System.out.write(65);
System.out.write('\n');
System.out.write('A');
System.out.write('\n');

}
}

输出:

A
A
A

虽然System.out是一个字节流,那为什么它是以Characters的形式输出而不是以字符的形式输出字节。(或者我理解错了。字节流与输出的表示无关。)

最佳答案

因为 System.out 是默认分配的 PrintStream(控制台输出),所以对 System.out.write(int) 的任何调用都会将 int 值转换为 ASCII 字符。

所以如果你想打印 65 你必须 System.out.write("65");

一切都取决于分配给您的作者的流。

关于java - 虽然 write() 中将 byteval 声明为整数,但为什么 Java I/O 流中只将低位八位写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com