java InputStream/OutputStream类介绍

在 Java 中,InputStream 和 OutputStream 是两个基本的 I/O 类,用于处理字节流的输入和输出。它们分别是输入和输出操作的基类,并且都有多个子类,支持从各种数据源读取数据和将数据写入各种数据目标。以下是它们的关系、基类、子类及其常见用途的详细介绍。

InputStream 和 OutputStream 的关系

  • InputStream:是一个抽象类,表示字节输入流的所有类的超类。它定义了从不同输入源(如文件、内存缓冲区、网络连接)读取字节数据的基本方法。
  • OutputStream:是一个抽象类,表示字节输出流的所有类的超类。它定义了向不同输出目标(如文件、内存缓冲区、网络连接)写入字节数据的基本方法。

InputStream 和 OutputStream 并没有直接的继承关系,但它们是互补的,分别处理输入和输出操作。

InputStream 的基类和子类

基类

  • java.io.InputStream:抽象类,定义了基本的读取方法。

常见子类

  • FileInputStream:从文件中读取数据。
  • ByteArrayInputStream:从字节数组中读取数据。
  • BufferedInputStream:为另一个输入流提供缓冲功能,提高读取效率。
  • DataInputStream:用于读取 Java 原始数据类型(如 int、double)的输入流。
  • ObjectInputStream:用于反序列化对象的输入流。
  • PipedInputStream:管道输入流,用于线程之间的通信。
  • FilterInputStream:是其他输入流的抽象装饰器类,为输入流提供附加功能的基类。

OutputStream 的基类和子类

基类

  • java.io.OutputStream:抽象类,定义了基本的写入方法。

常见子类

  • FileOutputStream:向文件中写入数据。
  • ByteArrayOutputStream:将数据写入字节数组。
  • BufferedOutputStream:为另一个输出流提供缓冲功能,提高写入效率。
  • DataOutputStream:用于写入 Java 原始数据类型(如 int、double)的输出流。
  • ObjectOutputStream:用于序列化对象的输出流。
  • PipedOutputStream:管道输出流,用于线程之间的通信。
  • FilterOutputStream:是其他输出流的抽象装饰器类,为输出流提供附加功能的基类。

示例代码

使用 InputStream 读取文件
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamExample {
    public static void main(String[] args) {
        try (InputStream inputStream = new FileInputStream("example.txt")) {
            int data;
            while ((data = inputStream.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
使用 OutputStream 写入文件
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStreamExample {
    public static void main(String[] args) {
        String data = "Hello, World!";
        try (OutputStream outputStream = new FileOutputStream("example.txt")) {
            outputStream.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

继承层次结构

InputStream 的继承层次结构
java.lang.Object
  └─ java.io.InputStream
       ├─ java.io.ByteArrayInputStream
       ├─ java.io.FileInputStream
       ├─ java.io.FilterInputStream
       │    ├─ java.io.BufferedInputStream
       │    ├─ java.io.DataInputStream
       │    ├─ java.io.PushbackInputStream
       ├─ java.io.ObjectInputStream
       ├─ java.io.PipedInputStream
       ├─ java.io.SequenceInputStream
       └─ java.net.SocketInputStream
OutputStream 的继承层次结构
java.lang.Object
  └─ java.io.OutputStream
       ├─ java.io.ByteArrayOutputStream
       ├─ java.io.FileOutputStream
       ├─ java.io.FilterOutputStream
       │    ├─ java.io.BufferedOutputStream
       │    ├─ java.io.DataOutputStream
       │    ├─ java.io.PrintStream
       ├─ java.io.ObjectOutputStream
       ├─ java.io.PipedOutputStream
       └─ java.net.SocketOutputStream

总结

  • InputStream 和 OutputStream 是 Java I/O 系统的核心,用于处理字节流的输入和输出。
  • 它们有多个子类,支持从各种数据源读取和向各种数据目标写入。
  • 通过组合使用 InputStream 和 OutputStream 的子类,可以实现高效的数据传输和处理。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值