JavaIO 2—流式I/O之InputStream、OutputStream介绍

    在上篇文章(点击打开链接)中我介绍了File类的使用方法,我们可以利用File类创建删除目录和文件等操作。但是更多的是我们想读取数据,或者写入数据,这个是File类做不到的。在Java中利用输入流和输出流来解决写入和读取的工作。

    流(Stream)是字节的源或目的,我们可以把流想象成我们现实生活中的水流,我们需要水的时候在自来水管里取水,我们想要把水倒掉的时候,我们就将其倒到了下水管道里。这里的自来水管就类似Java中的输入流,在里面我们可以读取数据。下水管道就类似Java中的输出流,我们可以向里面写入数据。所以我们说,可从中读出一系列字节的对象称为输入流。而能向其中写入一系列字节的对象称为输出流。

    流分为节点流和过滤流。节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。过滤流可以给我们提供功能的增强。 在Java中给我提供了一个抽象的基类InputStream。在这个类中有几个方法我们介绍一下:三个基本的读方法:

      abstract int read() :读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。如果我读入了一个大于一个字节的数据,那么只有第一个字节是有用的。

      int read(byte[] b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。

      int read(byte[] b, int off,int len) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。

其它方法

      long skip(long n) :在输入流中跳过n个字节,并返回实际跳过的字节数。

      int available() :返回在不发生阻塞的情况下,可读取的字节数。

      void close() :关闭输入流,释放和这个流相关的系统资源。

      void mark(int readlimit) :在输入流的当前位置放置一个标记,如果读取的字节数多于readlimit设置的值,则流忽略这个标记。

      void reset() :返回到上一个标记。

      boolean markSupported() :测试当前流是否支持mark和reset方法。如果支持,返回true,否则返回false。

    下面我们以图表的形式给出这个类的层次:

JavaIO 2—流式I/O之InputStream、OutputStream介绍_第1张图片

    这里对于这些类的层次结构,我们不用刻意去背,等到我们用的多了,我们渐渐的也就都记住了。

    下面我们介绍一下OutputStream类,这个类也是抽象的,它里面提供了一些方法我们需要记住:

三个基本的写方法

     abstract void write(int b) :往输出流中写入一个字节。

     void write(byte[] b) :往输出流中写入数组b中的所有字节。

     void write(byte[] b, int off,int len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。

其它方法

     void flush() :刷新输出流,强制缓冲区中的输出字节被写出。

     void close() :关闭输出流,释放和这个流相关的系统资源。

    下面我们以图表的形式给出这个类的继承层次结构:

JavaIO 2—流式I/O之InputStream、OutputStream介绍_第2张图片

    对于InputStream和OutputStream这两个类的方法还有很多,我们可以参照Java的帮助文档学习。

    如果哪里写错了,请直接指出。

你可能感兴趣的:(java,Stream,File,文档,byte,磁盘)