Java IO流-----缓冲流详述

缓冲流

  • 处理流:缓冲流为处理流的一种,处理流,即“套装”在已有的流的基础上

  • 缓冲流动的作用:提高流的读取、写入的速度

  • 提高读写速度的原因:内部提供了一个缓冲区

  • BufferedInputStream

  • BufferedOutputStream

package www.bh.c.iotest;
import java.io.*;

public class Test8 {
    
    
    public static void main(String[] args) {
    
    
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
    
    
            //1.创建File类的对象,指明文件读取和写入的对象
            File file = new File("calss\\Java.png");
            File file1 = new File("calss\\Java2.png");
            //2.创建流
            //2.1创建节点流
            FileInputStream fileInputStream = new FileInputStream(file);
            FileOutputStream fileOutputStream = new FileOutputStream(file1);
            //2.1创建缓冲流
            bufferedInputStream = new BufferedInputStream(fileInputStream);
            bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
            //3.复制图片
            byte[] b=new byte[10];
            int len;
            while ((len=fileInputStream.read(b))!=-1){
    
    
                fileOutputStream.write(b,0,len);
            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //4.关闭流资源
            //先关闭外面的流,再关闭里面的流
            //注:关闭外层流的同时,内层流也会关闭
            try {
    
    
                if (bufferedInputStream!=null){
    
    
                    bufferedInputStream.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
            try {
    
    
                if (bufferedOutputStream!=null){
    
    
                    bufferedOutputStream.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}
  • BufferedReader
  • BufferedWriter
package www.bh.c.iotest;
import java.io.*;
//使用BufferedReader和BufferedWrite实现文本的复制
public class Test9 {
    
    
    public static void main(String[] args) {
    
    
        Test9 test9 = new Test9();
        String srcPath="E:\\Test\\calss\\hello1.txt";
        String destPath="E:\\Test\\calss\\hello3.txt";
        long startTime=System.currentTimeMillis();
        test9.bufferedTest(srcPath,destPath);
        long endTime=System.currentTimeMillis();
        System.out.println("处理时间为:"+(endTime-startTime));
    }

    public void bufferedTest(String srcPath,String destPath) {
    
    
        //创建文件
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        try {
    
    
            File file = new File(srcPath);
            File file1 = new File(destPath);
            //创建流
            //创建节点流
            FileReader fileReader = new FileReader(file);
            FileWriter fileWriter = new FileWriter(file1);
            //创建缓冲流
            bufferedReader = new BufferedReader(fileReader);
            bufferedWriter = new BufferedWriter(fileWriter);
            //读写文件
            char[] chars = new char[5];
            int len;
            while ((len=bufferedReader.read(chars))!=-1){
    
    
               bufferedWriter.write(chars,0,len);
            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //关闭流资源
            try {
    
    
                if (bufferedReader!=null){
    
    
                    bufferedReader.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
            try {
    
    
                if (bufferedWriter!=null){
    
    
                    bufferedWriter.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}
  • 总结:
    • FileInputStream:read(byte[] buffer)
    • FileOutputStream:write(byte[] buffer,0,len)
    • FileReader:read(char[] cbuf)
    • FileWrite:write(char[] cbuf,0,len)
    • BufferedInputStream:read(byte[] buffer)
    • BufferedOutputStream:write(byte[] buffer,0,len)
    • BufferedReader:read(char[] cbuf)/readerLine()
    • BufferedWriter:write(char[] cbuf,0,len)
  • 练习1:图片的加密和解密
package www.bh.c.iotest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test10 {
    
    
    public static void main(String[] args) {
    
    
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
    
    
            //创建文件对象
            File file = new File("calss\\Java.png");
            File file1 = new File("calss\\Java1.png");
            //创建流
            fileInputStream = new FileInputStream(file);
            fileOutputStream = new FileOutputStream(file1);
            //复制图片并加密
            byte[] b=new byte[20];
            int len;
            while ((len=fileInputStream.read(b))!=-1){
    
    
                for (int i=0;0<len;i++){
    
    
                    b[i]=(byte)(b[i] ^ 5);//图片加密,字节数组进行修改
                }
    //            for (int i=0;0<len;i++){
    
    
    //                b[i]=(byte)(b[i]^5);//图片解密
    //            }
                fileOutputStream.write(b,0,len);
            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //关闭流资源
            if (fileInputStream!=null){
    
    
                try {
    
    
                    fileInputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if (fileOutputStream!=null){
    
    
                try {
    
    
                    fileOutputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 练习2:获取文本上字符出现的次数并输出
/*
思路:1.遍历文本每一个字符
2.字符出现的次数存到map中
3.把map中的数据写入文件*/

package www.bh.c.iotest;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test11 {
    
    
    public static void main(String[] args) {
    
    
        FileReader fileReader = null;
        BufferedWriter bufferedWriter = null;
        try {
    
    
            //1.创建map集合
            Map<Character, Integer> map = new HashMap<>();
            //2.遍历每一个字符,每一个字符出现的次数放到map中
            fileReader = new FileReader("calss\\hello1.txt");
            int len=0;
            while ((len=fileReader.read())!=-1){
    
    
                //int还原char
                char c=(char) len;
                //判断char是否在map中第一次出现
                if (map.get(c)==null){
    
    
                    map.put(c,1);
                }else {
    
    
                    map.put(c,map.get(c)+1);
                }
            }
            //3.将map中数据存放到文件中
            //3.1创建Writer
            FileWriter fileWriter = new FileWriter("calss\\hello2.txt");
            bufferedWriter = new BufferedWriter(fileWriter);
            //3.2遍历map,再写入数据
            Set<Map.Entry<Character, Integer>> entries = map.entrySet();
            for (Map.Entry<Character, Integer> enter:entries){
    
    
                switch (enter.getKey()){
    
    
                    case ' ':
                        bufferedWriter.write("空格="+enter.getValue());
                        break;
                    case '\t'://"\t"表示tab键字符
                        bufferedWriter.write("tab键="+enter.getValue());
                        break;
                    case '\r':
                        bufferedWriter.write("回车="+enter.getValue());
                        break;
                    case '\n':
                        bufferedWriter.write("换行="+enter.getValue());
                        break;
                    default:
                        bufferedWriter.write(enter.getKey()+"="+enter.getValue());
                        break;
                }
                bufferedWriter.newLine();
            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //4.关闭流资源
            if (fileReader!=null){
    
    
                try {
    
    
                    fileReader.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if (bufferedWriter!=null){
    
    
                try {
    
    
                    bufferedWriter.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/insist_to_learn/article/details/110489839