`
beck5859509
  • 浏览: 108954 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何提高输入输出流的读写效率。

    博客分类:
  • java
 
阅读更多
本文主要介绍我在压缩解压文件的过程中遇到的一些共性问题。

起因:
      文件压缩后,文件接收端自然会进行解压,这里的解压需要根据文件压缩的方式来进行区分。比如文件是按字符压缩还是字节压缩,不过无论是哪种压缩方式。其解压的总体思路大同小意。
    比如按照zip方式压缩。首先创建文件输入流,接着读取输入流,然后再写入输出流中。
    
        InputStream input = zipFile.getInputStream(entry);
        OutputStream output = new FileOutputStream(outFile);
        int temp = 0;
        while((temp = input.read()) != -1){
            output.write(temp);
        }
     

运行过后,写文件速度很慢,分析后发现有两个慢的原因,一个是输入流没有做缓存区处理,另一个是输出流也没有做。修改后:
    
                FileOutputStream fos = new FileOutputStream(entry.getName());
                BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
                byte[] data = new byte[1024];
                int count = 0;
                while ((count = zin.read(data, 0, 1024)) != -1) {
                    dest.write(data, 0, count);
                }


再运行会发现写速度明显比之前快多了。根本原因在于不用缓冲区,则每次读一个,再写一个必然会慢。之前只调整写的缓存冲大小,其实提升并不大。
   
0
1
分享到:
评论

相关推荐

    IO流之缓冲流

    所有的缓冲流都没有任何的读取写入文件的能力,都需要对应的输入流和输出流来提供对应的能力 在创建缓冲流对象时,需要传入对应的输入流对象和输出流对象 底层就是提供了一个默认大小的缓冲数组用于提高效率 1.2 ...

    JAVA课程设计(1).doc

    " " (4)通过数据输入输出流与客户端进行数据读写,完成双向通信。 " " (5)当客户端断开连接时,关闭各个流对象,结束通信。 " "该部分主要由Server、ServerThread和GetConnection3个类组成。 " "b)客户端 " "(1)...

    java各知识点详细总结.docx

    文件读写:Java中的文件读写包括输入输出流、文件类、缓冲流等。Java中的文件读写可以通过Java I/O API来实现。 多线程编程:Java中的多线程编程是一种实现并发程序的方法。Java中的多线程通过创建线程对象和实现...

    java缓冲流、转换流、序列化流.docx

    缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。 字节缓冲流 构造方法 创建字节缓冲输入流: BufferedInputStream bis = new ...

    java IO流学习笔记——(1)文件字节流

    • 输出流:程序到目的地(OutputStream、Writer写出去) 流分类 : • 节点流:可以直接从数据源或目的地读写数据 • 处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。 目的主要是简化操作和提高性能...

    JAVA文件传输的实现.rar

    文件流操作:使用Java的文件输入输出流(FileInputStream、FileOutputStream)读取和写入文件内容。 多线程处理:通过多线程实现并发处理多个文件传输请求,提高传输效率。 异常处理:处理网络异常、文件读写异常等...

    浅析标准I/O缓冲区

    作者:曾宏安,华清远见嵌入式培训中心讲师  学习过编程的朋友都知道ANSI C里定义的标准I/O是一种带缓冲的磁盘I/O,目的是尽可能减少使用read和write系统调用的...当流涉及一个终端时(例如标准输入和标准输出),典

    基于Misty1算法的加密软件(JAVA)的实现.rar

    文件IO操作:使用Java的文件IO流实现文件读写功能,确保加密文件的输入和输出。 安全性考虑: 密钥安全:采用安全的密钥管理机制,如密码学安全随机数生成器来生成密钥,确保密钥的随机性和安全性。 数据保护:对...

    软件工程-理论与实践(许家珆)习题答案

    顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。 中间层:表示某个加工分解为一组子加工,其中的子加工还需进一步分解。 底层:由不再进行分解的基本加工组成。 4. 加工小说明有...

    基于AT89S52 单片的频率计

    能,从而提高系统可靠性和速度。 集成电路的类型很多,从大的方面可以分为模拟电路和数字集成电路2 大 类。数字集成电路广泛用于计算机、控制与测量系统,以及其它电子设备中。 一般说来,数字系统中运行的电信号,...

    计算机系统结构试题集

    通用寄存器独立编址,输入输出与存储器统一编址 通用寄存器与存储器统一编址,输入输出单独编址。 只考虑存储器和输入输出的编址。 输入输出与寄存器统一编址,存储器单独编址。 17、下列不属于寄存器寻址方式优点...

    嵌入式红绿灯控制系统

    结合Bipolar高压和BCD高压制程工艺的XL4001、XL4002、XL4101、XL4102产品,输入电压可以做到5V-40V,具有恒流,恒压功能,内置过压、过流、短路、过温保护。针对LED驱动、MR16驱动(1W/3W LED 最高到10颗串联)的市场...

    你必须知道的495个C语言问题

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 2.15 如何确定域在结构中的字节偏移...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例021 重定向输出流实现程序日志 31 实例022 自动类型转换与强制类型转换 33 2.2 运算符 34 实例023 加密可以这样简单(位运算) 34 实例024 用三元运算符判断奇数和偶数 35 实例025 更精确地使用浮点数 35 实例...

    《你必须知道的495个C语言问题》

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 27  2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中的...

Global site tag (gtag.js) - Google Analytics