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();
     }
 }


测试结果:



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

相关文章
|
2月前
|
缓存 监控 IDE
linux如何查看io性能
linux如何查看io性能
|
9天前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
【6月更文挑战第26天】Java IO流涵盖字节流和字符流,字节流处理二进制数据,如图像,由InputStream/OutputStream家族管理;字符流处理文本,基于Reader/Writer,适于文本文件。在文件复制示例中,字节流用FileInputStream/FileOutputStream,字符流用FileReader/FileWriter。选择流类型取决于数据类型和处理需求,文本文件优选字符流,二进制数据则选字节流。
|
4天前
|
存储 缓存 Java
JavaSE—IO流之字符流与字节流
JavaSE—IO流之字符流与字节流
|
9天前
|
存储 自然语言处理 Java
Java IO流完全手册:字节流和字符流的常见应用场景分析!
【6月更文挑战第26天】Java IO流涵盖字节流和字符流,字节流用于二进制文件读写及网络通信,如图片和音频处理;字符流适用于文本文件操作,支持多语言编码,确保文本正确性。在处理数据时,根据内容类型选择合适的流至关重要。
|
9天前
|
自然语言处理 Java
Java IO流进阶教程:掌握字节流和字符流的高级用法!
【6月更文挑战第26天】Java IO流助你高效交换数据,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)的高级技巧。缓冲流(Buffered*)提升读写性能,对象流(Object*Stream)支持对象序列化。字符流的BufferedReader/BufferedWriter优化文本处理,注意字符集如UTF-8用于编码转换。掌握这些,优化IO操作,提升代码质量。
|
9天前
|
Java 测试技术
Java IO流深度剖析:字节流和字符流的性能对比!
【6月更文挑战第26天】Java IO流分字节流和字符流,字节流处理所有类型数据(如图片),字符流处理文本(基于Unicode)。字节流直接处理,性能高,适合非文本文件;字符流处理文本时考虑编码,适合文本文件。性能测试显示,字节流在读写非文本文件时更快,而字符流在处理文本时更方便。选择流类型应依据数据类型和需求。
|
9天前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
【6月更文挑战第26天】Java IO流涵盖字节流与字符流。字节流(InputStream/OutputStream)处理数据单位为字节,适用于二进制和文本,而字符流(Reader/Writer)专注于文本,处理单位为字符,处理编码转换。字符流在字节流基础上添加编码处理,以装饰器模式实现。文件复制示例展示了两者区别:字节流直接复制所有数据,字符流处理字符编码。理解并选择适当流类型对优化程序至关重要。
|
25天前
|
调度 数据库 开发者
在Python编程中,并发编程和异步IO是两个重要的概念,它们对于提高程序性能和响应速度具有至关重要的作用
【6月更文挑战第10天】本文介绍了Python并发编程和异步IO,包括并发编程的基本概念如多线程、多进程和协程。线程和进程可通过threading及multiprocessing模块管理,但多线程受限于GIL。协程利用asyncio模块实现非阻塞IO,适合处理IO密集型任务。异步IO基于事件循环,能提高服务器并发处理能力,适用于网络编程和文件操作等场景。异步IO与多线程、多进程在不同任务中有各自优势,开发者应根据需求选择合适的技术。
20 0
|
2月前
|
存储 缓存 Java
【Java IO系列】那字节流和字符流有什么区别?
而如果使用缓存流,一次性从文件里读取多个字节到缓存中,可以减少系统调用同时也减少了磁盘读取,提高了读取的效率。所以字符流是一个很方便的流了,没有必要把一个方便的流转换成一个不方便的流。,涉及到用户空间和内核空间之间的上下文切换,这些切换是很昂贵的。从输入流读取下一个数据字节,值字节以0到255范围内的。好的面试官,Java IO有两个参与对象,一个是。,这个基类提供了3个方法可以来读取字节流。,同样是提供了3个方法来支持字符流读取。好的,有这些不同之处,主要是3个方面。是这样的,虽然字节流比字符流的。
【Java IO系列】那字节流和字符流有什么区别?
|
2月前
|
缓存 Java API
Java NIO和IO之间的区别
NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
26 1