InputStream 和 OutputStream 对于字节流的输入和输出
是作为协议的存在
所以有必要了解下这两个类提供出来的基本约定
这两个类是抽象类,而且基本上没什么实现,都是依赖于子类具体的去实现
但是他是对于其子类 协议纲领一般的存在
了解清楚每一个方法含义,对于后续具体的子类将会有非常大的帮助
基本含义
InputStream | 所有字节输入流的 超类 他是一个抽象类 |
OutputStream | 所有字节输出流的 超类 他是一个抽象类 |
方法列表
InputStream 包含了读取方法以及辅助方法
OutputStream包含了写入方法以及辅助方法
方法对照
read()
read(byte[])
read(byte[], int, int)
|
write(byte[])
write(byte[], int, int)
write(int)
|
close | close |
flush() | |
available()
mark(int)
markSupported()
reset()
skip(long)
|
方法详解
read
write
read() 与write(int b) 是根本的读取一个字节或者写入一个字节的方法 其余形式是针对传入字节数组作为参数,以及指定字节数组的偏移量时的一些拓展功能 一旦传递了字节数组作为参数 read将会读取数据到字节数组 write将会将字节数组的数据写入 |
close
都需要关闭流,所以都有close方法 都是关闭流并释放与此流有关的系统资源 都可能抛出IOException |
在InputStream和OutputStream中,两个close方法都是空方法 |
flush
flush的含义为刷新,在写入数据时使用 所以,只有输出流拥有flush方法 |
之所以需要刷新,是因为有的输出流的写方法实现,可能已经缓冲了以前写入的任何字节 那么,这个方法用于提供能够立即将数据写入到磁盘的功能 不过,只是立即请求操作系统进行处理,而不保证这些字节实际已经写入到物理设备,比如磁盘 |
下面几个为InputStream独有
public long skip(long n) throws IOException
|
返回的是实际跳过的字节数 在内部创建一个 byte 数组,然后重复将字节读入其中,直到读够 n 个字节或已到达流末尾为止 |
![]() |
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15614.html