在 Java 编程中,`InputStream` 和 `OutputStream` 是两个非常重要的抽象类,它们分别用于处理字节输入流和字节输出流。这两个类是 Java 输入输出(I/O)操作的核心,广泛应用于文件读写、网络通信等场景。
InputStream 类的基本方法
`InputStream` 类提供了许多方法来从输入流中读取数据。以下是一些常用的方法:
1. int read()
该方法从输入流中读取一个字节的数据。如果已经到达流的末尾,则返回 -1。
2. int read(byte[] b)
该方法从输入流中读取多个字节,并将其存储到字节数组 `b` 中。返回值表示实际读取的字节数。
3. int read(byte[] b, int off, int len)
这是一个更灵活的版本,允许指定从哪个偏移量开始读取以及最多读取多少字节。
4. long skip(long n)
跳过输入流中的 `n` 个字节,并返回实际跳过的字节数。
5. int available()
返回输入流中可以立即读取的字节数。
6. void close()
关闭输入流并释放与其相关的系统资源。
7. void mark(int readlimit)
标记当前的位置,以便后续可以通过 `reset()` 方法恢复到这个位置。
8. boolean markSupported()
检查输入流是否支持标记功能。
OutputStream 类的基本方法
`OutputStream` 类提供了许多方法来向输出流中写入数据。以下是一些常用的方法:
1. void write(int b)
将单个字节写入输出流。
2. void write(byte[] b)
将整个字节数组写入输出流。
3. void write(byte[] b, int off, int len)
将字节数组的一部分写入输出流。
4. void flush()
刷新输出流,确保所有缓冲的数据都被写出。
5. void close()
关闭输出流并释放与其相关的系统资源。
示例代码
以下是一个简单的示例,展示如何使用 `InputStream` 和 `OutputStream` 来复制文件:
```java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("source.txt");
fos = new FileOutputStream("destination.txt");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) fis.close();
if (fos != null) fos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
```
在这个例子中,我们使用了 `FileInputStream` 和 `FileOutputStream` 来读取和写入文件。通过缓冲区的方式,我们可以高效地完成文件的复制操作。
总结
`InputStream` 和 `OutputStream` 是 Java I/O 操作的基础,它们提供了丰富的 API 来处理各种输入输出需求。熟练掌握这些类的基本方法,可以帮助开发者更高效地进行文件操作、网络通信以及其他数据处理任务。