InputStream 和 OutputStream 的用法

InputStream 和 OutputStream 是 Java I/O 库中的两个核心抽象类,它们分别用于表示字节数据的输入和输出流。这两个类本身不能直接实例化,但你可以通过它们的子类来创建具体的输入或输出流对象。下面将详细介绍 InputStream 和 OutputStream 的基本用法。

InputStream 的用法

InputStream 是所有输入字节流的超类。它定义了一个基本的 read() 方法来读取数据,该方法可以从输入流中读取数据的下一个字节。

常用方法
  • int read():从输入流中读取下一个数据字节。如果到达文件末尾,则返回 -1
  • int read(byte[] b):从输入流中读取一些字节数,并将它们存储到字节数组 b 中。返回实际读取的字节数,如果到达文件末尾,则返回 -1
  • int read(byte[] b, int off, int len):从输入流中读取最多 len 个字节的数据到一个字节数组中。off 指定了数组开始填充数据的偏移量。返回实际读取的字节数,如果到达文件末尾,则返回 -1
  • void close():关闭此输入流并释放与该流关联的所有系统资源。
示例代码
 
try (InputStream inputStream = new FileInputStream("example.txt")) {
int data = inputStream.read();
while (data != -1) {
// 处理读取到的数据
System.out.print((char) data); // 假设是文本文件,这里简单地将字节转换为字符
data = inputStream.read();
}
} catch (IOException e) {
e.printStackTrace();
}

OutputStream 的用法

OutputStream 是所有输出字节流的超类。它定义了一个基本的 write() 方法来写入数据,该方法将指定的字节写入此输出流。

常用方法
  • void write(int b):将指定的字节写入此输出流。
  • void write(byte[] b):将 b.length 个字节从指定的字节数组写入此输出流。
  • void write(byte[] b, int off, int len):从指定的字节数组写入 len 个字节到输出流中,从偏移量 off 处开始。
  • void flush():刷新此输出流并强制写出所有缓冲的输出字节。
  • void close():关闭此输出流并释放与此流关联的所有系统资源。
示例代码
try (OutputStream outputStream = new FileOutputStream("example.txt", true)) { // true 表示追加模式
String text = "Hello, OutputStream!";
byte[] textAsBytes = text.getBytes();
outputStream.write(textAsBytes);
outputStream.flush(); // 通常情况下,close() 方法调用时会自动调用 flush(),但显式调用 flush() 可以在关闭流之前确保所有数据都被写出
} catch (IOException e) {
e.printStackTrace();
}

注意事项

  • 在使用完流后,应该关闭流以释放系统资源。可以使用 try-with-resources 语句来自动管理资源,如上例所示。
  • 读写操作可能会抛出 IOException,因此需要进行异常处理。
  • flush() 方法用于确保所有缓冲的输出数据都被实际写出到底层输出流中。虽然 close() 方法会调用 flush(),但在某些情况下,你可能希望在关闭流之前显式调用 flush()
  • OutputStream 和 InputStream 的子类(如 FileOutputStream 和 FileInputStream)提供了更具体的文件操作功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值