Java IO流是用于处理输入和输出的API,是Java编程中非常重要的一部分。IO流包括输入流(Input Stream)和输出流(Output Stream),分别用于从数据源读取数据和将数据写入目标。Java的IO流分为字节流(Byte Streams)和字符流(Character Streams)两大类。
字节流(Byte Streams)
字节流用于处理原始的字节数据,比如图像、音频等二进制数据。字节流的基类是InputStream
和OutputStream
。
InputStream: 从数据源读取字节数据。
- 常见子类:
FileInputStream
: 从文件读取字节数据。ByteArrayInputStream
: 从字节数组读取数据。BufferedInputStream
: 提供缓冲功能,提高读取效率。
- 常见子类:
OutputStream: 将字节数据写入目标。
- 常见子类:
FileOutputStream
: 将字节数据写入文件。ByteArrayOutputStream
: 将数据写入字节数组。BufferedOutputStream
: 提供缓冲功能,提高写入效率。
- 常见子类:
示例:
读取文件中的字节数据并将其写入另一个文件:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
int byteData;
while ((byteData = fis.read()) != -1) {
fos.write(byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流(Character Streams)
字符流用于处理字符数据,适合处理文本文件。字符流的基类是Reader
和Writer
。
Reader: 从数据源读取字符数据。
- 常见子类:
FileReader
: 从文件读取字符数据。StringReader
: 从字符串读取字符数据。BufferedReader
: 提供缓冲功能,提高读取效率,并提供读取整行的功能。
- 常见子类:
Writer: 将字符数据写入目标。
- 常见子类:
FileWriter
: 将字符数据写入文件。StringWriter
: 将数据写入字符串缓冲区。BufferedWriter
: 提供缓冲功能,提高写入效率,并提供写入整行的功能。
- 常见子类:
示例:
读取文件中的字符数据并将其写入另一个文件:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharStreamExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")) {
int charData;
while ((charData = fr.read()) != -1) {
fw.write(charData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
缓冲流(Buffered Streams)
缓冲流是一种高级流,提供了内部缓冲区来提高读写性能。缓冲流有字节缓冲流和字符缓冲流两种。
字节缓冲流:
BufferedInputStream
: 包装在InputStream
上,提供缓冲功能。BufferedOutputStream
: 包装在OutputStream
上,提供缓冲功能。
字符缓冲流:
BufferedReader
: 包装在Reader
上,提供缓冲功能并支持读取整行。BufferedWriter
: 包装在Writer
上,提供缓冲功能并支持写入整行。
示例:
使用缓冲流读取和写入文件:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedStreamExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
Java IO流为我们提供了处理输入和输出的灵活手段,既可以处理二进制数据,也可以处理文本数据。通过合理使用基本流和缓冲流,我们可以高效地读写数据。在实际开发中,根据数据类型和性能需求选择合适的流类型和包装方式是非常重要的。