Java I/O流详解:字节流与字符流

需积分: 9 1 下载量 135 浏览量 更新于2024-07-13 收藏 122KB PPT 举报
"I/O流是Java编程中处理数据输入输出的核心概念,分为字节流和字符流两大类,涵盖输入和输出两个方向。字节流的基类是InputStream(输入)和OutputStream(输出),而字符流的基类是Reader(输入)和Writer(输出)。这些基类都是抽象类,具有多个子类,提供了丰富的功能。" 在Java I/O系统中,字节流主要处理以字节为单位的数据传输,适用于任何类型的数据,如图片、音频、视频以及二进制文件等。InputStream类是所有字节输入流的父类,提供了write(int b)、write(byte[] b)和write(byte[] b, int off, int len)等方法来写入字节数据。OutputStream类则是所有字节输出流的父类,除了write方法外,还包括flush()用于清空缓冲区并将数据写出,以及close()用于关闭流。 字符流是针对文本数据设计的,它处理的是Unicode字符序列。Reader类提供read()方法读取单个字符,而Writer类则用于输出字符。字符流的使用场景通常涉及文本文件或需要字符编码转换的情况。 OutputStream类的装饰模式在实际编程中十分常见,通过包装不同的装饰类,可以实现不同的功能扩展。例如,FileOutputStream将输出流关联到文件,使得数据直接写入文件;BufferedOutputStream引入了缓冲机制,提高性能,减少物理磁盘的频繁操作;PrintStream允许进行格式化的数据输出,如打印错误信息或进行简单的文本格式化。 以下是一个使用装饰模式的例子,展示了如何将标准输出(System.out)重定向到一个名为"out.txt"的文件,并通过PrintStream进行输出: ```java import java.io.*; public class Redirect { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("out.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos, 1024); PrintStream ps = new PrintStream(bos, false); // 重定向System.out到该文件 System.setOut(ps); // 输出 System.out.println("This is a test\u4321"); int n = 37; System.out.println(n); } } ``` 在这个例子中,我们创建了一个FileOutputStream实例,然后用它创建了BufferedOutputStream,最后通过PrintStream装饰它,这样所有的System.out.println()调用都会被重定向到"out.txt"文件中,包括文本和变量的值。 Java的I/O流机制提供了一套强大的工具,用于高效、灵活地处理各种数据输入输出操作。无论是简单的文件复制,还是复杂的网络数据传输,都能找到合适的流类进行处理。开发者可以根据需求选择不同的流类型和装饰类,实现数据的高效传输和控制。