欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IO流缓冲,学习笔记 ;基础入门,一看就懂,一篇文章解决缓冲好吧

程序员文章站 2022-06-05 19:46:05
...

首先了解以下缓冲流BufferedInputStream和BufferedOutputStream

概念 : BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterOutputStream的子类,这两个东西多出来的作用就是使用缓冲区,也就是通过缓冲区一次性读取很多的流,等缓冲区满了后一次性写入磁盘的操作就是缓冲流

简而言之就是你在创建完io流后把io流在扔到缓冲区Buffered就可以了

BufferedReader和 BufferedWriter也与之类似,注意,在写完数据后要i盗用close()或类似的方法,强行将缓冲区的数据写出

优点 : 缓冲区的效率更高,更好用

   代码演示环节 :
          首先来一边InputStream和OutputStream:
           try {
         //这里可能看着比较乱,实际上就是我创建了一个缓冲区BufferedInputStream然后直接在缓冲区中new 的一个输出流
		BufferedInputStream in = new BufferedInputStream(new FileInputStream("src/_IO流基础_1/aa.txt"));
		//同理
		BufferedOutputStream ou = new BufferedOutputStream(new FileOutputStream("src/_IO流基础_1/基础.txt"));
		byte[] by = new byte[1024];
		int t;
		
		while((t = in.read(by))!=-1) {//这里面加数组是直接走到了这个数组的最长长度,比如这里输出in.read(by)的话就是1024
			ou.write(new String(by,0,t).getBytes());//这个是String的构造函数,哪一个数组,从哪里开始,走多长的距离
		}
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

总结:如果第一小节看懂了,这里应该也差不多

     接下来Reader和Writer:
       try {
       //这么个流程和上面可以说是一毛一样
		BufferedReader in = new BufferedReader(new FileReader("src/_IO流基础_1/aa.txt"));
		BufferedWriter ou = new BufferedWriter(new FileWriter("src/_IO流基础_1/基础s.txt"));
		char[] by = new char[1024];//但是这里要改成char了,输出是按照字符输出的
		int t;
		
		while((t = in.read(by))!=-1) {
			ou.write(new String(by,0,t).toCharArray());//这个函数是将字符串转化成字符数组
		}
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

转换流:
首先从InputStream开始,OutputStream就不介绍了,一样的
转换流 : 字节转字符

   直接开讲 : 
        FileInputStream fr=null;   //存储具体的流
    try {
        //1、获取file对象
        File file = new File("src/_IO流基础_1/aa.txt");//File 类获取file对象 , 类构造方法获取文件
        //2、提供具体的流
        fr = new FileInputStream(file);
       //这里是转化成字符流,可能写的比较乱,这是在以前写的基础上改的//重点只有这一句,类似于缓冲流,就是将创建好的IO流扔到转化区就可以了
        InputStreamReader inp = new InputStreamReader(fr);
        //3、数据的读入,
        // read()返回读入的一个字符,如果到达文件末尾,返回-1
        //方式一:一个字节的读
 //            int read = fr.read();
//            while (read !=-1){
//                System.out.print((char) read);
//                read = fr.read();
//            }

        //方式二:字节数组读取
        char[] buffer = new char[1024];
        int len;
        while ((len=inp.read(buffer)) !=-1){
            String str = new String(buffer, 0, 1024);
            System.out.print(str);
        }
        System.out.println();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //4、流的关闭
        try {
            if(fr !=null) fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }