流是一种有顺序的,有起点和终点的字节集合,流是对输入输出的抽象
按照数据流向来分的话流可以分为输入流和输出流
输入流
InputStream(字节流)
实现类:FileInputStream
常用方法:
public int read() throws IOException // 从输入流中读取一个字节,并返回当前读取到的字节数据,若已读取到流的末尾则返回-1
public int read(byte[] b) throws IOException//最多从输入流中读取b.lenth个字节的数据,并储存在byte数组b中,返回读取到的字节数
Reader(字符流)
实现类:FileReader
常用方法:
public int read() throws IOException //从当前输入流中读取一个字符,并以int形式返回读取到的字符数据,若已到流的末尾,则返回-1
public int read(char[] cbuf) throws IOException //从当前输入流中读取chuf.lenth个字符数据,并储存在char数组中,返回读取到的字符数
注:对于将读取到的数据存放到数组的read方法,若某次读取到的数据没有存满数组,那么数组上一次读取到的数据不会被覆盖,还是在那里
输出流
OutputStream(字节流)
实现类;FileOutputStream
常用方法:
public void write(int b) throws IOException //将制定的字节输出到流中
public void write(byte[] buf) throws IOException //将byte数组的数据输出到流中
Writer(字符流)
实现类 :FIleWriter
常用方法
public void write(int c) throws IOException //将一个字符输出到路中
public void write(String str) throws IOException // 将字符串的内容输出到流中
字节流和字符流的区别
如果按照传输方式来分类,流又可以分为字节流和字符流,下面说一下两者的区别
字节流:
每次读取一个字节(8位)
字节流可以用处处理所有类型的数据(如图像,视频)
字节流操作的时候本身是不会用到缓冲区的,是对文件本身的直接操作,因此就算没有关闭流,数据以可以正常输出到文件中,但不推荐这样做
字符流:
每次读取一个字符(16位)两个字节
字符流专门也只能用于处理文本类型的数据,处理为文本时会像字节流一样把字符分开两个字节读取而出现乱码
字符秀操作的时候需要使用缓冲区,字符流本质也是基于字节流读取的,因此其处理效率低于字节流