在Java中,I/O(输入/输出)流是用于处理数据输入和输出的核心API之一。Java的I/O API主要位于java.io
包中,并且它提供了一系列类来读取和写入基本类型的数据,如字节和字符。
基础概念
- InputStream 和 OutputStream 是用来处理字节流的抽象基类。
- Reader 和 Writer 是用来处理字符流的抽象基类。
- 所有具体的I/O类都是从这些基类派生出来的。
字节流
- InputStream:用于读取原始字节。
- OutputStream:用于写入原始字节。
常见的子类
- FileInputStream/FileOutputStream:用于文件的读写。
- ByteArrayInputStream/ByteArrayOutputStream:用于在内存中创建一个字节数组的输入/输出流。
- BufferedInputStream/BufferedOutputStream:为提高效率,提供缓冲功能。
- DataInputStream/DataOutputStream:可以读写基本数据类型,例如int, float等。
- ObjectInputStream/ObjectOutputStream:用于对象的序列化与反序列化。
字符流
- Reader:用于读取字符。
- Writer:用于写入字符。
常见的子类
- FileReader/FileWriter:用于文件的字符读写。
- StringReader/StringWriter:用于读写字符串。
- BufferedReader/BufferedWriter:提供缓冲功能以提高效率。
- PrintWriter:用于格式化输出。
使用示例
下面是一个简单的例子,展示如何使用FileInputStream和FileOutputStream进行文件复制。
1import java.io.FileInputStream;
2import java.io.FileOutputStream;
3import java.io.IOException;
4
5public class FileCopyExample {
6 public static void main(String[] args) {
7 FileInputStream in = null;
8 FileOutputStream out = null;
9 try {
10 // 打开输入流
11 in = new FileInputStream("source.txt");
12 // 打开输出流
13 out = new FileOutputStream("destination.txt");
14
15 byte[] buffer = new byte[1024];
16 int length;
17
18 // 读取并写入数据
19 while ((length = in.read(buffer)) > 0) {
20 out.write(buffer, 0, length);
21 }
22 } catch (IOException e) {
23 e.printStackTrace();
24 } finally {
25 try {
26 if (in != null) in.close();
27 if (out != null) out.close();
28 } catch (IOException e) {
29 e.printStackTrace();
30 }
31 }
32 }
33}
注意事项
- 在使用I/O流时,通常需要捕获
IOException
。 - 在操作完成后,记得关闭流以释放资源。
- Java 7引入了try-with-resources语句,可以自动关闭实现
AutoCloseable
接口的资源。