zoukankan      html  css  js  c++  java
  • Java-IO流系列-缓冲流

    缓冲流

    缓冲流的作用

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

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

    实现非文件的复制

    注意:

    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();
                }
            }
         
        }
    }
    
    

    效果

    image-20210117204239136

    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();
               }
           }
        }
    }
    

    效果:

    image-20210118155811118

    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+"
    ");
                }
    
                //关闭资源
                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();
                }
            }
        }
    }
    

    效果:

    image-20210118160322533

    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();
        }
    }
    

    加密效果:

    image-20210118162018797

    解密:

    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();
        }
    }
    

    结果:

    image-20210118162151608

    统计字符出现次数

    获取文本上每个字符出现的次数
    提示:遍历文本的每一个字符:字符及出现的次数保存在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写入文件,略
        }
    }
    
    
  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940206.html
Copyright © 2011-2022 走看看