• 缓冲流


    一、缓冲流:

    Java中提供了一套缓冲流,它的存在,可提高IO流的读写速度

    缓冲流,根据流的分类分为:字节缓冲流与字符缓冲流。

    二、字节缓冲流:

    字节缓冲流根据流的方向,共有2个:

    1.写入数据到流中,字节缓冲输出流 BufferedOutputStream

    2. 读取流中的数据,字节缓冲输入流 BufferedInputStream

    它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度

    2.1字节缓冲输出流 BufferedOutputStream类

    复制代码
    public class BufferedOutputStreamDemo01 {
        public static void main(String[] args) throws IOException {
            
            //写数据到文件的方法
            write();
        }
    
        /*
         * 写数据到文件的方法
         * 1,创建流
         * 2,写数据
         * 3,关闭流
         */
        private static void write() throws IOException {
            //创建基本的字节输出流
            FileOutputStream fileOut = new FileOutputStream("abc.txt");
            //使用高效的流,把基本的流进行封装,实现速度的提升
            BufferedOutputStream out = new BufferedOutputStream(fileOut);
            //2,写数据
            out.write("hello".getBytes());
            //3,关闭流
            out.close();
        }
    }
    复制代码

    2.2字节缓冲输入流 BufferedInputStream类

    复制代码
    private static void read() throws IOException {
            //1,创建缓冲流对象
            FileInputStream fileIn = new FileInputStream("abc.txt");
            //把基本的流包装成高效的流
            BufferedInputStream in = new BufferedInputStream(fileIn);
            //2,读数据
            int ch = -1;
            while ( (ch = in.read()) != -1 ) {
                //打印
                System.out.print((char)ch);
            }
            //3,关闭
            in.close();
        }
    复制代码

    练习题:利用缓冲字节流复制文件

    复制代码
    package com.oracle.demo02;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    //缓冲字节流
    public class BufferCopy {
    
        public static void main(String[] args) throws IOException {
            long time1=System.currentTimeMillis();
            //1.确定数据源
            FileInputStream fis=new FileInputStream("e:\java\eclipse.zip");
            BufferedInputStream bis=new BufferedInputStream(fis);
            //2.确定目标地
            FileOutputStream fos=new FileOutputStream("d:\java\java\dandan\eclipse.zip");
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            //3.读取与写入
            int len=0;
            byte[] bytes=new byte[1024];
            while((len=bis.read(bytes))!=-1){
                bos.write(bytes);
            }
            //4.刷新并释放资源
            bos.flush();
            bos.close();
            bis.close();
            long time2=System.currentTimeMillis();
            System.out.println("所用时间:"+(time2-time1)/1000+"秒");
        }
    
    }
    复制代码

     三、字符缓冲流

    1. 字符缓冲输入流 BufferedReader

    2.  字符缓冲输出流 BufferedWriter

    完成文本数据的高效的写入与读取的操作

    3.1字符缓冲输入流BufferedReader类

    从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

    特殊方法:

    readLine() 读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

    复制代码
    package com.oracle.Demo01;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Demo02 {
    //字符缓冲输入流
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            FileReader fr=new FileReader("e:\java\output.txt");
            BufferedReader br=new BufferedReader(fr);
            //读取一个文本行的方法      .readLine()   返回值为String  用null来控制循环
            //while循环方法读取
            String str=null;
            while((str=br.readLine())!=null){   //当返回值为null时,说明读取不到字符了
                System.out.println(str);
            }
            //普通方法读取
    //        String str1=br.readLine();
    //        System.out.println(str1);
    //        String str2=br.readLine();
    //        System.out.println(str2);
    //        String str3=br.readLine();
    //        System.out.println(str3);   //当读取不到内容时,会返回null
            br.close();
        }
    
    }
    复制代码

    3.2字符缓冲输出流BufferedWriter类

    将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

    特殊方法:

    newLine() 根据当前的系统,写入一个换行符。

    复制代码
    package com.oracle.Demo01;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Demo01 {
    //字符缓冲输出流
        public static void main(String[] args) throws IOException {
            //1.确定目的地
            FileWriter fw=new FileWriter("e:\java\output.txt",true);
            //2.封装为字符缓冲流
            BufferedWriter bw=new BufferedWriter(fw);
            //3.写入数据
            bw.write("你好吗");
            bw.newLine();    //字符缓冲输出流,换行的方法:.newLine();
            bw.flush();
            bw.write("我很好");  //刷新流并不会关闭流,所以可以继续输出
            bw.close();
            
        }
    
    }
    复制代码

    练习题:利用缓冲流进行文件复制

    复制代码
    package com.oracle.Demo01;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class BufferedCopy {
    //缓冲字符流的复制
        public static void main(String[] args) throws IOException {
            //1.获取数据源
            FileReader fr=new FileReader("e:\java\output.txt");
            //2.封装成缓冲流
            BufferedReader br=new BufferedReader(fr);
            //3.获取目的地
            FileWriter fw=new FileWriter("e:\java\copy.txt",true);
            //4.封装成缓冲流
            BufferedWriter bw=new BufferedWriter(fw);
            //5.读取与写入
            String str=null;
            while((str=br.readLine())!=null){
                bw.write(str);
                bw.newLine();   //因为读取时是用文本行方法读取的,所以为了格式统一,需要加入换行方法
            }
            //6.释放资源
            bw.newLine();
            bw.close();
            br.close();
        }
    
    }
    复制代码
  • 相关阅读:
    【java】:G1回收器,S0一直是0,S1一直100
    为impala开启HDFS缓存
    [jvm] sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.51b03
    [linux] httpd: AH00543: httpd: bad user name apache
    IOS – OpenGL ES 同心圆像素化马赛克效果 GPUImagePolarPixel
    C/C++ 实现内存特征码搜索
    驱动开发:实现驱动加载卸载工具
    C/C++ 使用SEH让崩溃进程转存
    neo4j
    keepalive主备切换失败问题分析及解决办法
  • 原文地址:https://www.cnblogs.com/gaowc/p/10701474.html
Copyright © 2020-2023  润新知