首页 课程 师资 教程 报名

深入学习Java I/O的输入输出,看了就会

  • 2021-12-02 16:11:23
  • 1279次 动力节点

Java I/O需要处理多种场景,Java类库的设计者都是通过创建大量的类来解决这个问题的,单篇文章难以详述,本文只是试图提供一个通用的概述传统I/O类库所涉及的类,以掌握整个上下文,更好地理解和应用I./O类库解决实际编程问题。具体需要参考JDK文档。

深入学习java

1.输入流/输出流

在Java 1.0中,类库的设计者首先限制所有与输入相关的类都继承自InputStream,而与输出相关的所有类都继承自OutputStream。

1)输入流

InputStream用于表示从不同数据源生成输入的类。这些数据来源包括:

  • 字节数组;
  • 字符串对象
  • 文件;
  • “管道”的工作方式与实际管道类似,即一端输入,另一端输出。
  • 一系列其他流,以便我们可以将它们收集并合并为一个流;
  • 其他数据源,如Internet连接等。

每个数据源都有其对应的InputStream子类作为基本组件:

  • ByteArray InputStream,允许将内存缓冲区用作InputStream;
  • String Buffer InputStream,将String转换为InputStream;
  • FileInputStream,用于从文件中读取信息;
  • PipedInputStream,它生成用于写入相关PipedOutputStream的数据。实现“流水线”的概念;
  • SequenceInputStream将两个或多个InputStream对象转换为单个InputStream。

2)输出流

  • OutputStream用于表示可以输出到不同数据源的类。它的特定子类决定了输出的目的地:字节数组、文件或管道。它也用作基本组件:
  • ByteArray输出流,它在内存中创建缓冲区。所有发送到流的数据都应该放在这个缓冲区中。
  • FileOutput Stream,用于将信息写入文件;
  • PipedOutputStream,任何写入其中的信息都会自动作为相关PipedInputStream的输出,实现“流水线”的概念;

3)装饰器

除了上述基本组件外,还有两个子类:FilterInputStream/FilterOutputStream,它们也是InputStream和OutputStream的子类。它们为“decorator”类提供基类,其中“decorator”类可以将属性或有用的接口连接到基本组件。因为上面提到的InputStream/OutputStream是单字节操作的,而真正的I/O场景远不止于此,它通过“装饰”来扩展其功能(原理是类的组合)。

我自己梳理了InputStream/OutputStream流继承层次结构,结合下面的讲解,可以对字节流系统有更清晰的认识:

4)过滤输入流

FilterInputStream类有以下子类,即具体的装饰器:

  • 数据输入流;
  • 缓冲输入流;
  • 行号输入流;

它的装饰功能主要有两个方面:

  • 读取不同基本类型的数据和String对象,如DataInputStream;
  • 内部修改InputStream的行为:Buffer InputStream,LineNumber InputStream,并保留它读过的行;

5)过滤输出流

与Filter Input Stream类似,Filter Output Stream主要完成写入功能,主要包括以下装饰器:

  • Data Output Stream与Data Input Stream一起使用,可以将基本类型的数据(int、char、long)以可移植的方式写入流。
  • PrintStream,用于生成格式化输出。Data Output Stream处理数据存储,PrintStream处理显示。
  • Buffered Output Stream,用于避免每次发送数据时的实际写操作。表示“使用缓冲区”。可以调用flush()清除缓冲区;

以上就是动力节点小编介绍的"深入学习Java I/O的输入输出,看了就会",希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。     

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交