缓冲流

缓冲流

一.缓冲流
缓冲流也叫作高效流,是对四个基本的FileXXxx流的曾强,因此缓冲流也有四个流,按照数据类型分为:

  1. 字节缓冲流(可以是图片,视频,音频):BufferedInputStrream(字节缓冲输入流),BufferedOutputStrream(字节缓冲输出流)

  2. 字符缓冲流(文本类型的文件) BufferedReader BufferedWriter

    缓冲流的基本原理:在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过对缓冲区的读写,减少系统的IO次数,从而提升读写的效率。
    

1.1 字节缓冲流
构造方法:
Public BufferedInputStream(InpuStream in);创建一个新的缓冲输入流
Public BufferedOutputStream(OutStream out);创建一个新的缓冲输出流
代码演示:

       //创建字节缓冲输入流
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
		//创建字节缓冲输出流
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt"));

1.1.1字节缓冲输出流(从内存里输出)
构造函数:
BufferedOutputStream(OutputStream out);创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out,int size):创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

参数:
OutputStream :字节输出流
我们可以传递FileOutputStream,缓冲流会给FileOutputStream增加一个换种去,提高 FileOutputStream的写入效率
Int size:指定缓冲区内部缓冲的大小,不指定 默认

使用步骤(重点)
	    1.创建FileOutputStream对象,构造方法重要绑定输出的目的地
	    2.创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象
	    3.调用BufferedOutputStream对象的write方法将数据写入到缓冲区内
	    4.使用BufferedOutputStream对象的方法flush方法,把内部缓冲区中的数据,刷新到文件中
	    5.释放资源(会先调用flush方法刷新数据,第4步就可以省略)

代码:

public class Demo01BufferedOutputStream {
    public static void main(String[] args) throws IOException {
        //创建FileOutputStream对象,构造方法中绑定要输出的目的地
        FileOutputStream fos = new FileOutputStream("d:\\a.txt");
        //创建BufferedOutputStream对象  构造方法中传递FileOutputStream对象,提高FileOutputStream对象效率
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //使用BufferedOutputStream对象里面的write方法,把数据写入到内部缓冲区
        bos.write("数据写入到内部缓冲区".getBytes());
        //刷新
        bos.flush();
        //关闭资源
        bos.close();
    }
}

1.1.2 字节缓冲输入流(从外部存储设备输入到内存中

构造方法:
BufferedInputStream(InputStream in);创建一个新的缓冲输入流,以将数据写入指定的底层输入流
BufferedInputStream(InputStream in,int size);创建一个新的缓冲输入流,将具有指定缓冲区大小的数据写入指定的底层输入流

使用步骤(重点)
1.创建FileInputStream,构造方法中绑定要输出的目的地
2.创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高效率
3.使用BufferedInputStream对象中的read方法,把内部缓冲区中数据读到程序中
4.释放资源
代码:

public class Demo02BufferedIputStream {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("d:\\a.txt");

        BufferedInputStream bis = new BufferedInputStream(fis);
        byte[] bytes = new byte[1024];
        int len =0;
        while ((len = bis.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }
    }
}

1.2 字符缓冲流
构造方法:
Public BufferedWriter(Writer out) 创建一个新的缓冲输出流
Public BufferedReader(Reader in) 创建一个新的缓冲输入流

代码:

//创建字符缓冲输入流`
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));

`

1.2.1 字符缓冲输出流

构造方法:
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符流
BufferedWriter(Writer out,int size)创建一个使用给定大小缓冲区的缓冲字符流
参数:
Writer out :字符输出流
int size : 指定缓冲区的大小,不写使用默认
特有的成员方法:
public void newLine() 写入一个分隔符,会根据不同的操作系统 获取不同的行分隔符

使用步骤:
1.创建字符缓冲输出流,构造方法中传递字符输出流
2.调用字符缓冲流中的方法 write,把数据写入到内存缓冲区
3.调用flush方法,把内存缓冲区中的数据,刷新到文件中
4.释放资源

注意:System.out.println()换行方法其实就是用的newLine()方法

代码:

public class Demo03BufferedWriter {
    public static void main(String[] args) throws IOException {
//        1.创建字符缓冲输出流,构造方法中传递字符输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\a.txt"));
//        2.调用字符缓冲流中的方法 write,把数据写入到内存缓冲区
        for(int i=0;i<10;i++){
            bw.write("字符输出缓冲流");
            bw.newLine();
        }
//        3.调用flush方法,把内存缓冲区中的数据,刷新到文件中
        bw.flush();
//        4.释放资源
        bw.close();
    }
}

1.2.2字符缓冲输入流

构造方法:
BufferedReader(Reader in) 创建一个使用默认大小缓冲区的输入流
BufferedReader(Reader in,int size)创建一个使用指定大小缓冲区的输入流

参数:
Reader in:字符输入流 可以传递FileReader
Int size:指定缓冲区大小 不写使用默认

特有的成员方法:
public String readLine() 读取一个文本行,读取一行数据,一行被视为由换行符回车符中的任何一个或随后的换行符终止

返回值:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null

使用步骤:
1.创建字符缓冲输入流对象,构造方法中传递字符输入流
2.使用字符缓冲输入流对象的方法read/readLine读取文本
3.释放资源

代码:

public class Demo04BufferedReader {
    public static void main(String[] args) throws IOException {
//        1.创建字符缓冲输入流对象,构造方法中传递字符输入流
        BufferedReader br = new BufferedReader(new FileReader("d:\\a.txt"));
//        2.使用字符缓冲输入流对象的方法read/readLine读取文本
        //定义字符串
        String line;
        //循环读取
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
//        3.释放资源
    br.close();
    }
}

应用实例:将乱序的出师表排序

public class ChuShiBiao {
    public static void main(String[] args) throws IOException {
        HashMap<String, String> obj = new HashMap<>();
        //创建字符缓冲输入流
        BufferedReader br = new BufferedReader(new FileReader("F:\\day0127\\zy\\csblx.txt"));
        //创建字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\day0127\\zy\\out.txt"));

        String line;

        //将字符读入到缓冲输入流,将其添加到hashMap中组成键值对
        while ((line = br.readLine())!=null){
            String[] sp = line.split("\\.");
            obj.put(sp[0],sp[1]);
        }

        //遍历键,拿到对应的值重新排序
        Set<String> keyNum = obj.keySet();
        System.out.println(keyNum);
        for (String s : keyNum) {
            bw.write("\r\n"+s+"."+obj.get(s));
        }
     // 关闭资源
        br.close();
        bw.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值