会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132482个问题
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 14838楼
JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解(旧) 14840楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 14843楼

老师,这里使用BufferedInputStream和BufferedOutputStream定义的处理流,是不是与自定义byte[]数组缓冲区然后read(byte[] b)并不一样?


我的理解:

1)处理流仍然是一个字节一个字节从数据源中读取数据,只是将这些字节缓存在处理流定义的字节数组中,之后等满了以后(达到8192个字节)再读入到程序中;

2)而自定义的缓冲区是一次直接从数据源中读取多个字节(比如定义的1024个字节数组)到程序中。


处理小文件的时候,自定义的会不会效率更高一下?

处理大文件的时候使用那个更好一些?

两个结合在一块使用适用吗?(比如第二段代码中的适用)


第一段代码:

package cn.ljp;

import java.io.*;

public class TestBufferedInputStream02 {
    public static void main(String[] args) {
        // 1) 定义字节流和处理流
        InputStream fis = null;
        InputStream fib = null;
        OutputStream fos = null;
        OutputStream fob = null;
        try{
            fis = new FileInputStream("f:/a.png");
            fib = new BufferedInputStream(fis);
            fos = new FileOutputStream("f:/aa.png");
            fob = new BufferedOutputStream(fos);
            int emp = 0;
            long start = System.currentTimeMillis();
            while((emp = fib.read()) != -1){
                System.out.println(emp);
                fob.write(emp);
            }
            fob.flush();
            long stop = System.currentTimeMillis();
            System.out.println("花费时间" + (stop - start) + "毫秒");
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try{
                if(fib != null)
                    fib.close();
                if(fis != null)
                    fis.close();
                if(fob != null)
                    fob.close();
                if(fos != null)
                    fos.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

第二段代码:

package cn.ljp;

import java.io.*;

public class TestBufferedInputStream {
    public static void main(String[] args) {
        // 1) 定义字节流和处理流
        InputStream fis = null;
        InputStream fib = null;
        OutputStream fos = null;
        OutputStream fob = null;
        try{
            fis = new FileInputStream("f:/a.png");
            fib = new BufferedInputStream(fis);
            fos = new FileOutputStream("f:/aa.png");
            fob = new BufferedOutputStream(fos);
            byte[] buff = new byte[1204];
            int emp = 0;
            long start = System.currentTimeMillis();
            while((emp = fib.read(buff)) != -1){
                System.out.println(emp);
                fob.write(buff,0,emp);
            }
            fob.flush();
            long stop = System.currentTimeMillis();
            System.out.println("花费时间" + (stop - start) + "毫秒");
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try{
                if(fib != null)
                    fib.close();
                if(fis != null)
                    fis.close();
                if(fob != null)
                    fob.close();
                if(fos != null)
                    fos.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    }
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 14845楼
Python 全系列/第五阶段:数据库编程/MySQL数据库的使用 14846楼
JAVA 全系列/第十一阶段:分布式RPC调用和分布式文件存储/Zookeeper 14847楼
Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 14848楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 14850楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637