IO缓冲流

IO缓冲流

缓冲流也叫高效流,可以更高效的进行读取;
转换流:可以进行编码转换
序列化流:持久化存储对象git

缓冲流

缓冲流--就是对应4个File**** 流的加强流
字节缓冲流:BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader,BufferedWritergithub

基本原理

缓冲流在建立流对象时,会建立一个内置的默认大小的缓冲区数组,经过缓冲区的读写,减小系统IO次数,从而提升读写的效率数组

字节缓冲流

BufferedInputStream

构造方法测试

BufferedInputStream(InputStream in)
建立一个 BufferedInputStream并保存其参数,输入流 in ,供之后使用。
BufferedInputStream(InputStream in, int size)
建立 BufferedInputStream具备指定缓冲区大小,并保存其参数,输入流 in ,供之后使用。编码

BufferedInputStream 的方法code

int available()
返回从该输入流中能够读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close()
关闭此输入流并释放与流相关联的任何系统资源。
void mark(int readlimit)
见的总承包 mark的方法 InputStream 。
boolean markSupported()
测试这个输入流是否支持 mark和 reset方法。
int read()
见 read法 InputStream的通常合同。
int read(byte[] b, int off, int len)
从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。
void reset()
见 reset法 InputStream的通常合同。
long skip(long n)
见 skip法 InputStream的通常合同。对象

示例:继承

/**
     * bufferedInputStream的使用步骤
     * 1.建立bufferedInputStream对象,并在构造方法中传入InputStream
     * 2.使用bufferedInputStream对象的read()方法读取数据
     * 3.释放资源
     */
    static void bufferedInputStream() {

        try (
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./src/JavaCore/IO/BOS.txt"), 1024)
        ) {
            int len;
            byte[] bytes = new byte[1024];
            while ((len = bis.read(bytes)) != -1) {
                System.out.println(new String(bytes, 0, len));
            }
        } catch (IOException E) {
            System.out.println(E);
        }
    }

BufferedOutputStream

构造方法ip

BufferedOutputStream(OutputStream out)建立一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size)建立一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。

方法:

intavailable()返回从该输入流中能够读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
voidclose()关闭此输入流并释放与流相关联的任何系统资源。
voidmark(int readlimit)见的总承包 mark的方法 InputStream 。
booleanmarkSupported()测试这个输入流是否支持 mark和 reset方法。
intread()见 read法 InputStream的通常合同。
intread(byte[] b, int off, int len)从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。

示例:

/**
     * bufferedOutputStream的使用步骤
     * 1.建立bufferedOutputStream对象,并在构造方法中传入OutputStream
     * 2.使用bufferedOutputStream的write()方法将数据写入缓冲区
     * 3.flush()将缓冲区的数据刷入文件
     * 4.关闭流
     */
    static void bufferedOutputStream() {
        //这里使用的JDK7的新特性,在try中new 流对象,使用完后自动关闭
        try (
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("./src/JavaCore/IO/BOS.txt"), 1024)
        ) {
            bos.write("这是一个昂扬的时代,同时充满了悲伤的故事".getBytes());
        } catch (IOException e) {
            System.out.println(e);
        }
    }

字符缓冲流

buffredReader

buffredReader--继承关系java.lang.Objec<-java.io.Write<-rjava.io.BufferedWriter

构造方法:

BufferedWriter(Writer out)建立使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)建立一个新的缓冲字符输出流,使用给定大小的输出缓冲区。

因此buffredReader的使用和Writer的方法基本一致,但buffredReader是须要传入一个writer对象,同时在buffredReader的方法中有一个新方法就是:

public void newLine()
         throws IOException写一行行分隔符。 行分隔符字符串由系统属性line.separator定义,并不必定是单个换行符('\ n')字符。

newLine()直接调用系统的line.separator定义。

bufferedReader

bufferedReader--继承关系:
java.lang.Object<-java.io.Reader<-java.io.BufferedReader

构造方法:

BufferedReader(Reader in)建立使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)建立使用指定大小的输入缓冲区的缓冲字符输入流。

bufferedReader构造方法中传入Reader对象,而后方法使用也基本和reader一致,但有一个独有方法:

public String readLine() throws IOException
读一行文字。 一行被视为由换行符(' n'),回车符(' r')中的任何一个或随后的换行符终止。
返回所读取行的内容,若是已经到达流的末尾则为null

本博客为Swagger-Ranger的笔记分享,文章会持续更新 文中源码地址: https://github.com/Swagger-Ranger 欢迎交流指正,若有侵权请联系做者确认删除: liufei32@outlook.com

相关文章
相关标签/搜索