码迷,mamicode.com
首页 > 编程语言 > 详细

Java-IO流系列-缓冲流

时间:2021-06-28 19:37:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:str   图片   rac   统计   com   test   oid   adl   关于   

缓冲流

缓冲流的作用

作用:缓冲流的作用主要是提高文件的读写效率

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

实现非文件的复制

注意:

  1. 资源关闭,先关外面再关里面
  2. 说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略

步骤:

  1. 创建文件
  2. 创建节点流
  3. 创建缓冲流
  4. 读取与写入
package com.dreamcold.io;

import java.io.*;

public class Demo07 {
    public static void main(String[] args) {
        BufferedInputStream bis=null;
        BufferedOutputStream bos=null;
        try {
            File srcFile=new File("image.jpg");
            File destFile=new File("image1.jpg");

            //造流
            //创建节点流
            FileInputStream fis=new FileInputStream(srcFile);
            FileOutputStream fos=new FileOutputStream(destFile);

            //造缓冲流
            bis=new BufferedInputStream(fis);
            bos=new BufferedOutputStream(fos);

            //复制的细节写入
            byte[] buffer=new byte[10];
            int len;
            while ((len=bis.read(buffer))!=-1){
                bos.write(buffer,0,len);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            //资源关闭,先关外面再关里面
            //说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略
            try {
                if (bos!=null)
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (bis!=null)
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
    }
}

效果

技术图片

BufferReader和BufferWriter

  1. 使用char[]数组读取
package com.dreamcold.io;

import java.io.*;

public class Demo08 {
    public static void main(String[] args) {
        BufferedReader br=null;
        BufferedWriter bw=null;
       try {
           br=new BufferedReader(new FileReader(new File("test.txt")));
           bw=new BufferedWriter(new FileWriter(new File("test1.txt")));
           char[] cbuf=new char[1024];
           int len;
           //读写操作
           while((len=br.read(cbuf))!=-1){
               bw.write(cbuf,0,len);
           }
           //关闭资源
           br.close();
           bw.close();
       }catch (IOException e){
           e.printStackTrace();
       }finally {
           try {
               if (br!=null){
                   br.close();
               }
           }catch (IOException e){
               e.printStackTrace();
           }
           try {
               if (bw!=null){
                   bw.close();
               }
           }catch (IOException e){
               e.printStackTrace();
           }
       }
    }
}

效果:

技术图片

  1. 使用String来进行读取
package com.dreamcold.io;

import java.io.*;

public class Demo09 {
    public static void main(String[] args) {
        BufferedReader br=null;
        BufferedWriter bw=null;
        try {
            br=new BufferedReader(new FileReader(new File("test.txt")));
            bw=new BufferedWriter(new FileWriter(new File("test1.txt")));
            String data;
            while ((data=br.readLine())!=null){
                bw.write(data+"\n");
            }

            //关闭资源
            br.close();
            bw.close();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if (br!=null){
                    br.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
            try {
                if (bw!=null){
                    bw.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

效果:

技术图片

  1. 写入部分的代码还可以这样写:解决换行问题
 			String data;
            while ((data=br.readLine())!=null){
                bw.write(data);
                bw.newLine();
            }

缓冲流的练习

比较缓冲流与字节流效率

分别使用节点流: FilelnputStream、 FileOutputStream和缓冲流:BufferedInputStream、BufferedDutputStream实现文 木文件/图片/视频文件的复制。并比较二者在数据复制方面的效率

  • 字节流可以实现文本的复制,但是推荐字符流来处理
  • 缓冲流更有效率

实现图片加密操作

package com.dreamcold.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo10 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("image.jpg");
        FileOutputStream fos=new FileOutputStream("image1.jpg");
        byte[] buffer=new byte[1024];
        int len;
        while ((len=fis.read(buffer))!=-1){
            //字节数组进行加密操作
            for (int i=0;i<len;i++){
                buffer[i]=(byte)(buffer[i]^5);
            }
            fos.write(buffer,0,len);
        }
        if (fos!=null)
        fos.close();
        if (fis!=null)
        fis.close();
    }
}

加密效果:

技术图片

解密:

package com.dreamcold.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo10 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("image1.jpg");
        FileOutputStream fos=new FileOutputStream("image3.jpg");
        byte[] buffer=new byte[1024];
        int len;
        while ((len=fis.read(buffer))!=-1){
            //字节数组进行加密操作
            for (int i=0;i<len;i++){
                buffer[i]=(byte)(buffer[i]^5);
            }
            fos.write(buffer,0,len);
        }
        if (fos!=null)
        fos.close();
        if (fis!=null)
        fis.close();
    }
}

结果:

技术图片

统计字符出现次数

获取文本上每个字符出现的次数
提示:遍历文本的每一个字符:字符及出现的次数保存在Map中;将Map中数据写入文件

package com.dreamcold.io;

import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class Demo11 {
    public static void main(String[] args) {
        FileReader fr=null;
        BufferedWriter bw=null;
        try {
            Map<Character,Integer> map=new HashMap<>();
            fr=new FileReader("test.txt");
            int c=0;
            while ((c=fr.read())!=-1){
                char ch=(char)c;
                if(map.get(ch)==null){
                    map.put(ch,1);
                }else{
                    map.put(ch,map.get(ch)+1);
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if (fr!=null)
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (bw!=null)
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //将统计结果HashMap写入文件,略
    }
}

Java-IO流系列-缓冲流

标签:str   图片   rac   统计   com   test   oid   adl   关于   

原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!