20230621 java.io.InputStream

发布时间 2023-08-29 17:08:03作者: 流星<。)#)))≦

介绍

  • java.io.InputStream
  • public abstract class InputStream implements Closeable
  • FilterInputStream 是典型的装饰器设计模式,很多子类继承这个类,提供额外的功能
    protected volatile InputStream in;
    
    protected FilterInputStream(InputStream in) {
        this.in = in;
    }
    
  • 装饰模式参考 20230419 6. 装饰模式 - 衣服搭配
  • 从构造器可以看出到底是组件还是装饰器,如果包含入参是 InputStream 的构造器,那这个实现就是一个装饰器
    • FileInputStream 是组件
    • BufferedInputStream 是装饰器

API

构造器

  • InputStream()

public

  • read

    • abstract int read() throws IOException;
      • 从数据中读入一个字节,并返回该字节。这个 read 方法在碰到输入流的结尾时返回 -1
      • 唯一的抽象方法
    • int read(byte b[]) throws IOException
      • 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1 。这个 read 方法最多读入 b.length 个字节
    • int read(byte b[], int off, int len) throws IOException
      • 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1 。
        • b :数据读入的数组
        • off :第一个读入字节应该被放置的位置在 b 中的偏移量
        • len :读入字节的最大数量
  • available

    • 返回在不阻塞的情况下可获取的字节数(阻塞意味着当前线程将失去它对资源的占用)
  • readNBytes

    • byte[] readNBytes(int len) throws IOException
      • 如果未阻塞(read),则读入由 len 指定数量的字节,或者阻塞至所有的值都被读入
    • int readNBytes(byte[] b, int off, int len) throws IOException
      • 读入的值将置于 b 从 off 开始的位置。返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1
  • readAllBytes

    • 产生一个数组,包含可以从当前流中读入的所有字节
    • 调用 readNBytes
  • skip

    • 在输入流中跳过 n 个字节,返回实际跳过的字节数(如果碰到输入流的结尾,则可能小于 n)
  • skipNBytes

  • markSupported

    • 如果这个流支持打标记, 返回 true
  • mark

    • 在输入流的当前位置打一个标记(并非所有的流都支持这个特性)。 如果从输入流中已经读入的字节多于 readlimit 个, 这个流允许忽略这个标记
  • reset

    • 返回到最后一个标记,随后对 read 的调用将重新读入这些字节。如果当前没有任何标记, 这个流不被重置
  • transferTo

    • 将当前输入流中的所有字节传送到给定的输出流,返回传递的字节数。这两个流都不应该处于关闭状态
  • nullInputStream

    • 返回一个不包含任何字节的输入流
  • close