流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)
字节流
字节流的父类(抽象类):
字节流也可以按方向来划分
下面两个都是抽象类,一提到抽象类,就应该知道:它们两都不能实例化,不能直接new,只能实例化它们的子类,或者说实现类
- inputStream :字节输入流
- outputStream: 字节输出流
我们先来看看这两个字节流的介绍
这是:inputStream
这是OutputStream:
注意一下flush方法,close方法:IO资源宝贵
图片不重要所以 放小一点
字节输入流:读
字节输出流:写
字节流的子类
InputStream ------> FileInputStream :
public int read(byte[ ] b) //从流中读取多个字节,将读到的内容存入 b 数组中,返回实际读到的字节数;如果到达文件的底部,则返回 -1
读
第一种读取方式:一个字节一个字节的读 ,单个字节读取
read (): 返回值是int 类型,如果读取到文件末尾,返回 -1 。所以我们从文件当中读取出来的其实是ascll,需要转化为char类型
第二种读取字节方式:一次读取多个字节
创建一个数组存取多个字节,因为是存储字节,所以需要创建一个字节的数组
byte buf = new byte[3];
由于读取出来的是字节类型,可以使用String自带的将字节数组转化成字符串类型
写
一个一个字节的写入:
多个字节的写入,也是用到了字节数组。字符串string有一个方法可以将字符串转化成字节数组
应用:实现一个文件的复制功能
从硬盘当中读取数据,然后再将数据重写写入硬盘
byte[] buf = new byte[1024]; : 这里是按照1K 1 K 的来读,可以自己定义大小
fos.write(buf,0,count); :这里是为了防止文件大小不足1K,或者说是比1K大一点时,读取的时候应该以实际的字节数为标准读取