在Java中,I/O流(Input/Output Streams)是用于处理输入输出操作的基础工具。它们提供了一种统一的方式来读取和写入不同类型的资源,如文件、网络连接或内存缓冲区。通过使用流,Java程序可以以字节或字符的形式传输数据。
I/O流的分类
Java中的I/O流主要分为两大类:字节流和字符流。
字节流(Byte Streams)
字节流处理8位的字节数据。适用于任何类型的二进制数据,如图像、视频等。所有字节流类都是InputStream
和OutputStream
抽象类的子类。
- InputStream:用于从源读取字节数据。
- 常见子类包括
FileInputStream
、ByteArrayInputStream
、BufferedInputStream
等。
- 常见子类包括
- OutputStream:用于向目的地写入字节数据。
- 常见子类包括
FileOutputStream
、ByteArrayOutputStream
、BufferedOutputStream
等。
- 常见子类包括
字符流(Character Streams)
字符流处理16位Unicode字符,更适合处理文本数据。所有字符流类都是Reader
和Writer
抽象类的子类。
- Reader:用于从源读取字符数据。
- 常见子类包括
FileReader
、CharArrayReader
、BufferedReader
等。
- 常见子类包括
- Writer:用于向目的地写入字符数据。
- 常见子类包括
FileWriter
、CharArrayWriter
、BufferedWriter
等。
- 常见子类包括
缓冲流
为了提高效率,Java提供了带缓冲功能的流,如BufferedInputStream
、BufferedOutputStream
、BufferedReader
和BufferedWriter
。这些流内部维护了一个缓冲区,减少了直接与底层资源交互的次数,从而提高了性能。
标准流
Java提供了三个标准流,分别是:
System.in
:标准输入流,默认是从键盘读取数据。System.out
:标准输出流,默认是向控制台打印数据。System.err
:标准错误流,默认也是向控制台打印错误信息。
使用示例
写入文件
import java.io.*;
public class FileWritingExample {
public static void main(String[] args) throws IOException {
String content = "Hello, world!";
try (BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"))) {
writer.write(content);
}
}
}
读取文件
import java.io.*;
public class FileReadingExample {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
理解Java的I/O流模型对于处理各种输入输出任务至关重要。无论是简单的文件操作还是复杂的网络通信,掌握如何正确使用流都能极大地提高编程效率和代码质量。
THE END