Java中的流(Stream)是用于处理输入和输出的一种抽象概念。流可以分为两种类型:输入流(InputStream)和输出流(OutputStream)。输入流主要用于从数据源(如文件、网络连接等)读取数据,而输出流主要用于将数据写入目标(如文件、网络连接等)。
Java提供了丰富的流类来处理输入输出操作。以下是一些常用的输入输出流类:
输入流(InputStream):这是所有字节输入流的基类。一些常用的子类包括FileInputStream(从文件读取数据)、BufferedInputStream(带缓冲的输入流)和DataInputStream(可以读取基本数据类型的输入流)。
输出流(OutputStream):这是所有字节输出流的基类。一些常用的子类包括FileOutputStream(将数据写入文件)、BufferedOutputStream(带缓冲的输出流)和DataOutputStream(可以将基本数据类型写入输出流)。
字符流(Reader和Writer):字符流是用于处理文本数据的输入输出流。它们是InputStreamReader和OutputStreamWriter类的子类,分别用于将字节流转换为字符流。BufferedReader和BufferedWriter是常用的带缓冲的字符流,可以提高文本读写的性能。
以下是一个简单的Java输入输出流示例,用于从文件中读取文本并将文本写入另一个文件:
import java.io.*;
public class StreamExample {
public static void main(String[] args) {
// 创建输入流,从文件"input.txt"中读取数据
InputStream inputStream = new FileInputStream("input.txt");
// 使用BufferedReader进行带缓冲的字符流读取
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// 创建输出流,将数据写入文件"output.txt"
OutputStream outputStream = new FileOutputStream("output.txt");
// 使用BufferedWriter进行带缓冲的字符流写入
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
// 读取文本并写入输出流
String line;
try {
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭流,释放资源
try {
bufferedReader.close();
bufferedWriter.close();
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这个示例中,我们使用了FileInputStream和FileOutputStream类来创建输入输出流,然后使用BufferedReader和BufferedWriter类来进行带缓冲的字符流读写操作。在读取完数据后,我们需要关闭所有打开的流以释放资源。在实际编程中,我们可以使用try-with-resources语句来自动关闭流,以避免资源泄漏。