java FileI(O)nputStream为什么比BufferedI(O)utputStream慢?

因为buffered多了一个缓冲区,读和写都是先把硬盘或者内存中的数据放到内存中一块缓存区域,到一定大小读写到硬盘或者内存

 

package io;

import java.io.*;

public class FileIOTest {

    /**
     * @param args
     * @throws FileNotFoundException
     */
    public static void main(String[] args) throws Exception {

        //有buff的File***Stream
        System.out.println("有buff的File***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{
                FileInputStream fis = new FileInputStream("F:\\Test\\file.zip");

                FileOutputStream fos = new FileOutputStream("F:\\Test\\file1.zip");

                byte[] buf = new byte[1024];

                int length = 0;


                while ((length = fis.read(buf)) > 0) {
                    fos.write(buf, 0, length);
                }

                fis.close();
                fos.close();

            }
        }.getTime();
       
        //有buff的Buffered***Stream
        System.out.println("有buff的Buffered***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{

                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\Test\\file.zip"));

                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream("F:\\Test\\file2.zip"));
               
                byte[] buf = new byte[1024];

                int length = 0;
               
                while ((length = bis.read(buf)) > 0) {
                    bos.write(buf, 0, length);
                }

                bis.close();
                bos.close();
               
            }
        }.getTime();
       
        //无buff的File***Stream
        System.out.println("无buff的File***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{
                FileInputStream fis = new FileInputStream("F:\\Test\\file.zip");

                FileOutputStream fos = new FileOutputStream("F:\\Test\\file3.zip");

                int data = 0;

                while ((data = fis.read()) !=-1) {
                    fos.write(data);
                }

                fis.close();
                fos.close();
            }
        }.getTime();
       
        //无buff的Buffered***Stream
        System.out.println("无buff的Buffered***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\Test\\file.zip"));

                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream("F:\\Test\\file4.zip"));
               
                int data = 0;
               
                int i =bis.available();
               
                while ((data = bis.read()) !=-1) {
                    bos.write((byte)data);
                }

                bis.close();
                bos.close();
            }
        }.getTime();
    }

}

//抽象的不太好的模板设计模式
abstract class TimeTest {

    void getTime() {
        long start = System.currentTimeMillis();
        try {
            run();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(System.currentTimeMillis() - start);
    }

    abstract void run() throws Exception;
}

 

 

测试数据248kb

 

测试结果:

 

有buff的File***Stream耗时:
8
有buff的Buffered***Stream耗时:
2
无buff的File***Stream耗时:
1369
无buff的Buffered***Stream耗时:
14

转载于:https://www.cnblogs.com/flying607/p/3460389.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用echarts图表获取条状图点击名称和值

如何利用echarts图表获取条状图点击名称和值 听语音 |浏览:1505|更新:2017-06-13 10:20|标签:软件 1 2 3 4 5 6 7 分步阅读 echarts图表插件工具,包含了各种不同类型的图形,有圆饼图、折线图、圆环图、柱状图…

TP5: 日志记录改造——4

TP5的日志如果没有特别设置的话,只要出现错误就会记录在日志文件中。这种是没有做必要的,因为这样的话,LOG文件会特别大,而且有好多都是没有用的信息。下面我们对LOG日志进行改造只记录我们需要的信息。 还记得上一章中&#xff…

.NET使用免费开源类库操作Excel

2019独角兽企业重金招聘Python工程师标准>>> 自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍。 主要找到以下类库: MyXls(http://sourceforge.net/projects/m…

信管网

https://www.cnitpm.com/

php CURL 发送请求详解

cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP…

JMS 消息处理

转载于:https://www.cnblogs.com/luswei/p/7504781.html

设计模式(单例)

单例模式是最简单的设计模式, 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 适用性: 只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 当这个唯一实例应该是通过子类化可扩展的,并且客户…

牛刀小试、用SharePoint 实现请假管理功能

转:http://www.cr173.com/html/15518_1.html “请假管理”应用,应该算是 SharePoint 的“Hello World!”、川菜里面的鱼香肉丝、粤菜里面的蛋炒饭 。。。吧? 怎么样才能做出简易、实用的请假管理,一直都是都是一个问题…

js遍历json对象

原生js遍历json对象 遍历json对象&#xff1a; 无规律&#xff1a; <script> var json [ {dd:SB,AA:东东,re1:123}, {cccc:dd,lk:1qw} ]; for(var i0,ljson.length;i<l;i){ for(var key in json[i]){ alert(key:json[i][key]); } } </script> 有规律&…

JS-封装js让一个div或者img的移动

/* * 运动函数 * 参数&#xff1a; * elem 操作的元素节点 * obj 操作的元素节点上的css属性和css属性值 * attr 操作的元素节点上的css属性 * target 操作的元素节点上的css属性的目标值 * fn 运动结束后的所要执行的函数 */function startMove(elem, obj, fn){ // 开定时器 …

linux如何查看mysql是否启动

linux下有很多服务&#xff0c;今天就写一下如何查看服务是否启动&#xff0c;以mysql为例子 使用命令 # service mysqld status 或者 # service mysql status 命令来查看mysql 的启动状态 如果是 mysqld is stopped 那就说明mysql服务是停止状态&#xff0c; 如果是 mysqld is…

django时区设置问题

2019独角兽企业重金招聘Python工程师标准>>> 最近用Django开发项目&#xff0c;在使用datetime类获取.now()时&#xff0c;获取的时间比实际时间相差8小时左右&#xff08;感觉是UTC时间&#xff09;&#xff0c;服务器使用的时区是“Asia/Shanghai”&#xff08;08…

js文件中声明的一个json对象, 在另一个js文件中可以直接使用。

1. 如在 AAA.js 文件中声明一个json对象。 var world_geo_json {"type":"FeatureCollection","offset":{"x":170,"y":90},"features":[ ] }; 2. 调用。 <html lang"en"> <head> &l…

Objective-C模版方法(TemplateMethod)

什么是模版方法&#xff1f; 官方&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模版方法使子类可以重新定义算法的某些步骤而不改变算法的结构。 个人理解&#xff1a;模版方法没必要刻意去理解&#xff0c;平时的编码过程中不知不觉就会用到…

微信小程序+TP5——token令牌生成

token令牌的作用&#xff1a;客户端每次登录服务器端都会生成一个唯一的token令牌值&#xff0c;并返回到客户端&#xff0c;而服务器端会默认将token令牌值作为key, 用户信息作为value&#xff0c;一一对应存入缓存中&#xff0c;当用户每一次发送请求时&#xff0c;都要携带这…

vs code 代码格式化整理

On Windows Shift Alt F On Mac Shift Option F On Ubuntu Ctrl Shift I 但是自带的格式化并不能满足我的需求&#xff0c;这个时候&#xff0c;不得不说插件大法好。 1、代码格式化为eslint风格&#xff08;参考自这里&#xff09; 需要插件&#xff1a;eslint 在设置…

基于live555实现的RTSPServer对底层进行性能优化的方法

在博客《EasyIPCamera高性能摄像机RTSP服务器RTSPServer解决方案》我介绍了基于live555实现的一套RTSPServer功能组件&#xff0c;当时开发者经过几个月的调试&#xff0c;已经将底层的性能调试到了一个业界非常优秀的程度&#xff0c;主要优化的几点&#xff1a; 发送优化调度…

sqlite 字符串 转 整型 cast 函数 (强制类型转换 )

sqlite 字符串 转 整型使用 cast 函数 语法&#xff1a; cast(col_name as type) 例子&#xff1a; 表&#xff1a;JobInfo 表内字段&#xff1a;Salary 薪水 select * from JobInfo where cast(substr(Salary,1,5)as int)>10000 结果集&#xff1a; 转载于:https://www.cn…

2018.2.2PHPstrom破解版

--------------------- 作者&#xff1a;聽の雨ぷ 来源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/qq_39439751/article/details/82758330 版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请附上博文链接&#xff01; 首先将我为大家事先准备好的打…