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, intoff,intlen) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。

其它方法

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

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

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

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

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

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

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

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

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

三个基本的写方法

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

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

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

其它方法

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值