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语句来自动关闭流,以避免资源泄漏。