掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

Java字节流OutputStream和InputStream详解(类结构、核心方法、使用示例)

在 Java 中,字节流是用于处理二进制数据的输入输出方式,主要通过 InputStream 和 OutputStream 这两个抽象类实现。它们是 Java I/O 系统的核心部分,广泛应用于文件读写、网络传输、数据序列化等场景。本文将详细介绍 InputStream 和 OutputStream 的类结构、核心方法以及实际使用示例,帮助开发者更好地理解和应用字节流。

一、InputStream 类结构与核心方法

InputStream 是所有字节输入流的父类,它定义了从源中读取字节的基本操作。其子类包括 FileInputStream、ByteArrayInputStream、BufferedInputStream 等,适用于不同类型的输入来源。

  1. read() 方法

用于从输入流中读取一个字节,返回值为读取到的字节(0~255),如果已到达流末尾则返回 -1。

int data;
while ((data = inputStream.read()) != -1) {
    System.out.print((char) data);
}
  1. read(byte[] b) 方法

将字节读入指定的字节数组中,返回实际读取的字节数。常用于批量读取数据。

byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    // 处理 buffer 数据
}
  1. available() 方法

返回当前可读取的字节数,用于判断是否还有数据未读。

  1. close() 方法

关闭输入流,释放相关资源。

二、OutputStream 类结构与核心方法

OutputStream 是所有字节输出流的父类,用于向目标写入字节数据。其子类包括 FileOutputStream、ByteArrayOutputStream、BufferedOutputStream 等。

  1. write(int b) 方法

向输出流中写入一个字节,参数 b 是一个 0~255 的整数。

outputStream.write('A');
  1. write(byte[] b) 方法

将字节数组中的所有字节写入输出流。

byte[] data = "Hello, World!".getBytes();
outputStream.write(data);
  1. flush() 方法

刷新输出流,确保所有缓冲的数据被写出,常用于需要立即写入磁盘或网络的情况。

  1. close() 方法

关闭输出流,释放相关资源。

三、常用子类与使用示例

  1. FileInputStream 和 FileOutputStream

用于读写本地文件。例如:

try (FileInputStream fis = new FileInputStream("input.txt");
     FileOutputStream fos = new FileOutputStream("output.txt")) {
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = fis.read(buffer)) != -1) {
        fos.write(buffer, 0, bytesRead);
    }
} catch (IOException e) {
    e.printStackTrace();
}
  1. BufferedInputStream 和 BufferedOutputStream

提供缓冲功能,提高读写效率。通常与 FileInputStream 或 FileOutputStream 一起使用。

try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"));
     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = bis.read(buffer)) != -1) {
        bos.write(buffer, 0, bytesRead);
    }
} catch (IOException e) {
    e.printStackTrace();
}
  1. ByteArrayInputStream 和 ByteArrayOutputStream

用于在内存中进行字节流操作,常用于临时存储或数据转换。

byte[] data = "Hello".getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b;
while ((b = bais.read()) != -1) {
    baos.write(b);
}
System.out.println(baos.toString()); // 输出: Hello

四、使用注意事项

在使用字节流时,应始终使用 try-with-resources 语句确保流能被正确关闭。

对于频繁读写操作,建议使用缓冲流(如 BufferedInputStream 和 BufferedOutputStream)以提升性能。

避免在多线程环境中共享同一个流对象,以免造成数据混乱或异常。

Java字节流OutputStream和InputStream详解(类结构、核心方法、使用示例)

InputStream 和 OutputStream 是 Java 中处理字节流的基础类,适用于各种二进制数据的读写操作。掌握它们的类结构、核心方法和使用技巧,能够帮助开发者高效地完成文件操作、网络通信等任务。合理选择流类型并结合缓冲机制,可以显著提升程序的性能与稳定性。理解并熟练运用字节流,是 Java 开发者必备的技能之一。

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 航班订票查询

    通过出发地、目的地、出发日期等信息查询航班信息。

    通过出发地、目的地、出发日期等信息查询航班信息。

  • 火车订票查询

    通过站到站查询火车班次时刻表等信息,同时已集成至聚合MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。

    通过站到站查询火车班次时刻表等信息,同时已集成至聚合MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。

  • 经济能力评级(个税)

    基于被查询人既往12个月个税缴纳数据,通过模型计算出被查询人的个税经济能力评级

    基于被查询人既往12个月个税缴纳数据,通过模型计算出被查询人的个税经济能力评级

  • 经济能力评级(社保)

    基于被查询人既往12个月个税缴纳数据,通过模型计算出被查询人的个税经济能力评级

    基于被查询人既往12个月个税缴纳数据,通过模型计算出被查询人的个税经济能力评级

  • 车辆过户信息查询

    通过车辆vin码查询车辆的过户次数等相关信息

    通过车辆vin码查询车辆的过户次数等相关信息

0512-88869195
数 据 驱 动 未 来
Data Drives The Future