文章目录
前言
在 Java 编程中,输入输出流(I/O Streams)是非常重要的概念,它们用于在程序与外部数据源(如文件、网络连接、控制台等)之间进行数据的读取和写入操作。本文将详细介绍 Java 中的输入输出流。
一、输入输出流概述
Java 的输入输出流主要分为字节流和字符流两大类。
- 字节流:以字节为单位进行数据的读取和写入,主要用于处理二进制数据,如图片、音频、视频等。字节流的基类是
InputStream
和OutputStream
。 - 字符流:以字符为单位进行数据的读取和写入,主要用于处理文本数据。字符流的基类是
Reader
和Writer
。
二、字节流
1. InputStream
和OutputStream
类
InputStream
是所有输入字节流的抽象基类,它定义了读取字节数据的基本方法,如read()
、available()
等。OutputStream
是所有输出字节流的抽象基类,它定义了写入字节数据的基本方法,如write()
、flush()
等。
2. 常用的字节流实现类
- 文件输入流:
FileInputStream
用于从文件中读取字节数据。 - 文件输出流:
FileOutputStream
用于向文件中写入字节数据。 - 缓冲输入流:
BufferedInputStream
为输入流提供缓冲功能,减少对底层数据源的读取次数,提高读取效率。 - 缓冲输出流:
BufferedOutputStream
为输出流提供缓冲功能,减少对底层数据源的写入次数,提高写入效率。
3. 示例代码
读取文件内容:
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt")) {
int byteRead;
while ((byteRead = fis.read())!= -1) {
System.out.print((char) byteRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
写入文件内容:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
String content = "Hello, World!";
fos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、字符流
1. Reader
和Writer
类
Reader
是所有输入字符流的抽象基类,它定义了读取字符数据的基本方法,如read()
、ready()
等。Writer
是所有输出字符流的抽象基类,它定义了写入字符数据的基本方法,如write()
、flush()
等。
2. 常用的字符流实现类
- 文件读取器:
FileReader
用于从文件中读取字符数据。 - 文件写入器:
FileWriter
用于向文件中写入字符数据。 - 缓冲读取器:
BufferedReader
为读取器提供缓冲功能,提高读取效率。可以使用readLine()
方法逐行读取文本。 - 缓冲写入器:
BufferedWriter
为写入器提供缓冲功能,提高写入效率。
3. 示例代码
读取文件内容:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = br.readLine())!= null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
写入文件内容:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String content = "Hello, World!";
bw.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、字节流与字符流的转换
在某些情况下,需要在字节流和字符流之间进行转换。可以使用InputStreamReader
和OutputStreamWriter
来实现这种转换。
例如,将字节流转换为字符流:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class ByteToCharStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr)) {
String line;
while ((line = br.readLine())!= null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
五、总结
Java 的输入输出流提供了强大的功能,可以方便地在程序与外部数据源之间进行数据的读取和写入操作。了解字节流和字符流的区别以及各种输入输出流的使用方法,对于编写高效、可靠的 Java 程序非常重要。在实际应用中,根据具体的需求选择合适的输入输出流,可以提高程序的性能和可维护性。