java学习总结()16.07.28)java的IO流

时间:2021-09-16 22:49:57

流是一种有顺序的,有起点和终点的字节集合,流是对输入输出的抽象


按照数据流向来分的话流可以分为输入流和输出流

输入流

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位)两个字节

字符流专门也只能用于处理文本类型的数据,处理为文本时会像字节流一样把字符分开两个字节读取而出现乱码

字符秀操作的时候需要使用缓冲区,字符流本质也是基于字节流读取的,因此其处理效率低于字节流