JAVA中几种文件操作流的效率对比

原创 2017年01月14日 18:25:28

以下案例说明了分别采用字节流方式、字节缓冲流方式读写文件的效率对比

package ioxcercise;


import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Comparator;

import java.util.Set;

import java.util.TreeMap;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

 

/*

 * 需求:把其他目录下的视频文件复制到指定目录中

 * 视频文件大小:49MB

 * 要求使用字节流的四种方式复制文件,比较四种方式的耗时:

 * 基本字节流一次读写一个字节

 * 基本字节流一次读写一个字节数组

 * 高效字节流一次读写一个字节

 * 高效字节流一次读写一个字节数组

 */

 

public class ioRWcomparation {

 

public staticvoid main(String[] args)throws IOException {

String from = "D:\\1oldBoy_4\\1216\\day12\\videos_day12\\testvideo.avi";

String to = "D:\\1oldBoy_4\\1216\\day18\\testvideo.rmvb";

TreeMap<Integer,String> hm = new TreeMap<Integer,String>(new Comparator<Integer>(){

@Override

public int compare(Integer int1, Integer int2) {

int num = int1 - int2;

int num2 = num == 0 ? int1.compareTo(int2) : num;

return num2;

}

});

//字节流:每次写入单个字节的耗时

long long1 = SimpleIoStream(from, to);

hm.put((int) long1,"字节流:每次写入单个字节的耗时(毫秒)");

 

//字节流:每次写入指定长度的字节数组的耗时

long long2 = MultiWritingStream(from, to);

hm.put((int) long2,"字节流:每次写入指定长度的字节数组的耗时(毫秒)");

//字节缓冲流:每次写入单个字节的耗时

long long3 = highEfficientSimpleStream(from, to);

hm.put((int)long3,"字节缓冲流:每次写入单个字节的耗时(毫秒)");

//字节缓冲流:每次写入指定长度的字节数组的耗时

long long4 = highEfficientMultiStream(from, to);

hm.put((int)long4,"字节缓冲流:每次写入指定长度的字节数组的耗时(毫秒)");

Set<Integer> set = hm.keySet();

for(Integer i : set){

System.out.println(hm.get(i)+" : "+i);

}

}

 

private staticlong highEfficientMultiStream(String from, String to)throws IOException{

long start = System.currentTimeMillis();

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));

byte[] readBytes =newbyte[1024];

int readResult = 0;

while((readResult = bis.read(readBytes)) != -1){

bos.write(readBytes, 0, readResult); //高效字节流一次读写一个字节数组

}

return System.currentTimeMillis() - start;

}

 

private staticlong highEfficientSimpleStream(String from, String to)throws IOException{

long start = System.currentTimeMillis();

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));

int len = 0;

while((len=bis.read()) != -1){//高效字节流一次读写一个字节

bos.write(len);

}

bis.close(); bos.close();

return System.currentTimeMillis() - start;

}

 

private static long MultiWritingStream(String from, String to)throws IOException {

long start = System.currentTimeMillis();

FileInputStream fis = new FileInputStream(from);

FileOutputStream fos = new FileOutputStream(to);

int len = 0;

byte[] bArr =newbyte[2048];

while((len=fis.read(bArr)) != -1){//基本字节流:一次读写一个字节数组

fos.write(bArr, 0, len);

}

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

return System.currentTimeMillis() - start;

}

 

public static long SimpleIoStream(String from, String to)throws IOException {

long start = System.currentTimeMillis();

FileInputStream fis = new FileInputStream(from);

FileOutputStream fos = new FileOutputStream(to);

int len = 0;

while ((len = fis.read()) != -1) {//基本字节流:一次读写一个字节

fos.write(len);

}

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

return System.currentTimeMillis() - start;

}

}


 

【使用大小为49MB的视频读写结果】

字节缓冲流:每次写入指定长度的字节数组的耗时(毫秒) : 212

字节流:每次写入指定长度的字节数组的耗时(毫秒) : 527

字节缓冲流:每次写入单个字节的耗时(毫秒) : 1134

字节流:每次写入单个字节的耗时(毫秒) : 710350


可以看出,缓冲流方式的读写速率明显比非缓冲流要大,每次读写字节数组的速率明显大于每次读写单个字节的速率.

版权声明:欢迎给我留言,多提意见。互相交流、共同进步! https://blog.csdn.net/qq_31598113/article/details/54428060

java中几种文件流的使用方法

本文为博主原创,更多好文章请点击这里文件类 exists()  判断文件或者目录是否存在 isFile()  判断是否是文件 isDirectory()  判断是否是目录 getPath()  获取文...
  • benhailong
  • benhailong
  • 2016-09-27 13:53:04
  • 2586

java文件操作和流

1.如何获取文件的属性信息?   boolean exists():判断文件或目录是否存在   String getName():返回文件或目录的名称   String getParent():返回父...
  • qq_16660859
  • qq_16660859
  • 2016-08-25 17:50:29
  • 1553

(1)Java文件流

文件在程序中是以流的形式来操作的 流:数据在数据源(文件)和程序(内存)之间经历的路径 输入流:数据从文件到内存的路径 输出流:数据从内存到文件的路径 Java流分为两类: 字节流:...
  • qq_26569761
  • qq_26569761
  • 2017-07-02 05:34:45
  • 333

Java中的文件和流相关知识

1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该...
  • u013360850
  • u013360850
  • 2016-08-14 22:17:17
  • 1416

java读取文件及文件流

 java读取文件或是文件流的代码,涵盖了读取jar文件中的文件流,网络文件流等,有些读取方式为了防止编码转换带来的问题,采取了动态byte[]的方式读取,源码如下 :import java.io.B...
  • yi0731
  • yi0731
  • 2007-11-26 11:33:00
  • 10049

Java中IO流文件读取、写入和复制

File f=new File(fileName); //构造文件File类 f.isDirectory(); //判断是否为目录 String[] fileName=f.list(); //获取目...
  • qq_31360175
  • qq_31360175
  • 2015-10-25 21:30:49
  • 26917

java文件流读写操作

file(内存)----输入流---->【程序】----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStre...
  • zalan01408980
  • zalan01408980
  • 2018-01-08 23:13:19
  • 197

java读取文件-字符流读取方式

java采用16位的Unicode来表示字符串和字符,对应的数据流就称为字符流。Reader和Writer为字符流设计。FileReader是InputStreamReader的子类,而InputSt...
  • ZSMJ_2011
  • ZSMJ_2011
  • 2012-09-14 17:02:03
  • 35767

Java IO字节流读取文件总结

本文对javaIO字节流的读取方式做总结,两种基本的读取方式。
  • wenzhi20102321
  • wenzhi20102321
  • 2016-09-19 11:08:17
  • 13925

Java流(Stream)、文件(File)和IO

Java流(Stream)、文件(File)和IO Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io包中的流支持很多种格式,比如:基本类型...
  • erlian1992
  • erlian1992
  • 2016-05-22 18:17:55
  • 5458
收藏助手
不良信息举报
您举报文章:JAVA中几种文件操作流的效率对比
举报原因:
原因补充:

(最多只允许输入30个字)