流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

字节流

 

字节流的父类(抽象类):

字节流也可以按方向来划分

下面两个都是抽象类,一提到抽象类,就应该知道:它们两都不能实例化,不能直接new,只能实例化它们的子类,或者说实现类

  • inputStream :字节输入流
  • outputStream: 字节输出流

 

我们先来看看这两个字节流的介绍

这是:inputStream

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

这是OutputStream:

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

注意一下flush方法,close方法:IO资源宝贵

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

图片不重要所以 放小一点

 

字节输入流:读

字节输出流:写

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

 

字节流的子类

 InputStream  ------> FileInputStream :

public int read(byte[ ] b) //从流中读取多个字节,将读到的内容存入 b 数组中,返回实际读到的字节数;如果到达文件的底部,则返回 -1

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

第一种读取方式:一个字节一个字节的读 ,单个字节读取

read (): 返回值是int 类型,如果读取到文件末尾,返回 -1 。所以我们从文件当中读取出来的其实是ascll,需要转化为char类型

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

第二种读取字节方式:一次读取多个字节

 

创建一个数组存取多个字节,因为是存储字节,所以需要创建一个字节的数组

byte buf = new byte[3];

由于读取出来的是字节类型,可以使用String自带的将字节数组转化成字符串类型

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

一个一个字节的写入:

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

多个字节的写入,也是用到了字节数组。字符串string有一个方法可以将字符串转化成字节数组

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

 

应用:实现一个文件的复制功能

 

从硬盘当中读取数据,然后再将数据重写写入硬盘

流 -------字节流 : InputStream(FileInputStream) 和 outputStream (FileOutputStream)

byte[] buf = new byte[1024];  : 这里是按照1K 1 K 的来读,可以自己定义大小

 

fos.write(buf,0,count); :这里是为了防止文件大小不足1K,或者说是比1K大一点时,读取的时候应该以实际的字节数为标准读取