IO流的字节流的缓冲和非缓冲方式的区别及性能对比

简介: IO流的字节流的缓冲和非缓冲方式的区别及性能对比

 

IO流的字节流的缓冲和非缓冲方式的区别及性能对比:

验证方式:复制相同的文件到E盘并对比花费的时间,代码如下。


 package com.led.io;
  import java.io.BufferedInputStream;
  import java.io.BufferedOutputStream;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.InputStream;
  import java.io.OutputStream;
 public class Buffer_Pro {
     /*
      * 非缓冲复制文件 
      */
     public static void steam()throws Exception{
         InputStream  inputStream=new FileInputStream("E://党//111.docx");
         OutputStream outputStream=new FileOutputStream("E://复制的.docx");
         int b=0;
         long startTime=System.currentTimeMillis();
         while((b=inputStream.read())!=-1){//读取到最后一个字节返回-1
             outputStream.write(b);
         }
         inputStream.close();//关闭输入流
         outputStream.close();//关闭输出流
        long endTime=System.currentTimeMillis();
         System.out.println("非缓冲复制花费的时间是:"+(endTime-startTime)+"ms");
     }
     /*
      * 带缓冲的复制文件
      */
     public static void bufferstream() throws Exception{
         BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("E://党//111.docx"));
         BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("E://复制的2.docx"));
         int b=0;
         long startTime=System.currentTimeMillis();//开始时间
         while((b=bufferedInputStream.read())!=-1){//读取到最后一个字节返回-1
             bufferedOutputStream.write(b);
         }
         bufferedInputStream.close();//关闭输入流
        bufferedOutputStream.close();//关闭输出流
        long endTime=System.currentTimeMillis();//结束时间
         System.out.println("缓冲复制花费的时间是:"+(endTime-startTime)+"ms");
     }
     public static void main(String[] args) throws Exception {
         steam();
         bufferstream();
     }
 }


测试结果:



原因:使用缓冲其实是在内存中开辟了一个缓冲区,用来存放数据,相当于一个中转站,因此效率更加高效。

相关文章
|
4月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
1月前
|
存储 缓存 算法
如何优化阻塞IO的性能?
【10月更文挑战第6天】如何优化阻塞IO的性能?
35 5
|
14天前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry系统盘测评IOPS、IO读写和时延性能参数
ESSD Entry云盘是阿里云推出的新一代云盘,具备高IOPS、低延迟和企业级数据保护能力。适用于开发与测试场景,支持按量付费和包年包月计费模式。99元和199元的ECS经济型e实例和通用算力型u1实例均采用ESSD Entry系统盘,性价比高。详细性能参数和价格请参考阿里云官方页面。
50 0
|
1月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
35 1
|
1月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
74 1
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
2月前
|
移动开发 Java Linux
IO流:字节流
在Java编程中,IO流是一个核心概念,用于与文件、网络、内存等数据源交互。Java的IO库提供丰富的类和方法支持数据读写。IO流分为字节流和字符流,前者可操作所有类型文件,后者仅限纯文本文件。`FileOutputStream`用于向文件写入字节,支持多种写入方式,并可通过构造函数的布尔参数控制是否追加写入。`FileInputStream`则用于从文件读取字节,支持逐字节或批量读取。文件拷贝可通过结合读写操作实现,高效的方法是一次性读取并写入大容量数组。处理IO流时需注意异常管理,合理使用try-catch-finally结构确保资源正确释放。JDK7及以后版本提供了自动关闭资源的简化语法
50 10
|
3月前
|
存储 Java 数据库连接
BIO阻塞IO流与数据存储大揭秘:性能与资源消耗,一文让你彻底解锁!
【8月更文挑战第25天】本文探讨了Java中BIO阻塞IO流与数据存储的概念及其实现。BIO作为一种传统IO模型,在处理每个客户端请求时需创建新线程并等待响应,这在并发量大时会导致性能下降和高资源消耗。示例代码展示了如何利用`ServerSocket`实现基于BIO的简单服务器。此外,文章还介绍了数据存储的基本方法,例如通过`BufferedWriter`向文件写入数据。两者对比显示,BIO适合连接数稳定的场景,而数据存储则适用于需要持久化保存信息的情况。通过这些分析和实例,希望能帮助读者更好地掌握这两种技术的应用场景及其优缺点。
44 0
|
3月前
|
存储 缓存 Java
15 Java IO流(File类+IO流+字节流+字符流+字节编码)
15 Java IO流(File类+IO流+字节流+字符流+字节编码)
53 3
|
3月前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
50 0