详解Java中IO字节流基本操作(复制文件)并测试性能

 更新时间:2019年04月10日 11:47:29   作者:会飞的Yang  
这篇文章主要介绍了Java中IO字节流基本操作(复制文件)并测试性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

此次案例将以复制文件的形式来演示IO字节流的基本操作,复制一个mp3文件,文件信息如下图:

main方法测试

 public static void main(String[] args) throws Exception {
		//源文件
		String srcFile = "src/a.mp3";
		//目的文件
		String destFile = "src/b.mp3";
		long start = System.currentTimeMillis();
        ...
		复制文件方法
        ...
		long end = System.currentTimeMillis();
		System.out.println("共耗时"+(end-start)+"毫秒");
	}

一、一次读取一个字节

//一次读取一个字节
public static void copy1(String srcFile,String destFile) throws Exception {
		
	//封装文件
	InputStream in = new FileInputStream(srcFile);
	OutputStream out = new FileOutputStream(destFile);
		
	//复制文件
	int b = 0;
	while ((b = in.read()) != -1) {
			out.write(b);
	}
		
	//释放资源
	in.close();
	out.close();
	}

运行截图:

二、一次读取一个字节数组

// 一次读取一个字节数组
public static void copy2(String srcFile, String destFile) throws Exception {
 
	// 封装文件
	InputStream in = new FileInputStream(srcFile);
	OutputStream out = new FileOutputStream(destFile);
 
	// 复制文件
	byte[] buff = new byte[1024];
	int len = 0;
	while ((len = in.read(buff)) != -1) {
			out.write(buff, 0, len);
	}
 
	// 释放资源
	in.close();
	out.close();
	}

运行截图:

三、使用高效缓冲区一次读取一个字节

/ 使用高效缓冲区一次读取一个字节
public static void copy3(String srcFile, String destFile) throws Exception {
 
	// 封装文件
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
 
	// 复制文件
	int b = 0;
	while ((b = bis.read()) != -1) {
			bos.write(b);
	}
 
	// 释放资源
	bis.close();
	bos.close();
	}

运行截图:

四、使用高效缓冲区一次读取一个字节数组

// 使用高效缓冲区一次读取一个字节数组
public static void copy4(String srcFile, String destFile) throws Exception {
 
	// 封装文件
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
 
	// 复制文件
	byte[] buf = new byte[1024];
	int len = 0;
	while ((len = bis.read(buf)) != -1) {
			bos.write(buf, 0, len);
	}
 
	// 释放资源
	bis.close();
	bos.close();
	}

运行截图:

注:每台测试的速度结果不一样

以上所述是小编给大家介绍的Java中IO字节流基本操作(复制文件)并测试性能,详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 超详细解释Java反射

    超详细解释Java反射

    本文非常详细的讲解了java反射具体的内容以及使用,java反射在现今的使用中很频繁,希望此文可以帮大家解答疑惑,可以帮助大家理解
    2021-11-11
  • Java中的随机数Random

    Java中的随机数Random

    这篇文章主要介绍了Java中的随机数Random,关于随机数的介绍不设置随机数种子,你每次随机抽样得到的数据都是不一样的。设置了随机数种子,能够确保每次抽样的结果一样,下面来了解具体的详细内容介绍吧
    2022-03-03
  • 解决mybatis分页插件PageHelper导致自定义拦截器失效

    解决mybatis分页插件PageHelper导致自定义拦截器失效

    这篇文章主要为大家介绍了解决mybatis分页插件PageHelper导致自定义拦截器失效方案示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java中的递增i++与++i的实现原理详解

    Java中的递增i++与++i的实现原理详解

    这篇文章主要介绍了Java中的i++与++i的实现原理详解,在Java中,i++是一种常见的递增操作符,用于将变量i的值增加1,它是一种简洁且方便的方式来实现循环和计数功能,i++可以用于各种情况,本文来看一下其实现原理,需要的朋友可以参考下
    2023-10-10
  • Spring AspectJ 实现AOP的方法你了解吗

    Spring AspectJ 实现AOP的方法你了解吗

    这篇文章主要为大家介绍了Spring AspectJ 实现AOP的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法

    Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法

    本文介绍在Spring Boot基础下配置数据源和通过 JdbcTemplate 编写数据访问的示例。感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-01-01
  • 教你如何正确了解java三大特性!!!!

    教你如何正确了解java三大特性!!!!

    所有的面向对象编程语言的思路都是差不多的,而这三大特性,则是思路中的支柱点,接下来我就重点讲解了一下java三大特性,感兴趣的朋友跟随脚本之家小编一起看看吧
    2021-07-07
  • 使用@RequestParam 绑定List参数

    使用@RequestParam 绑定List参数

    这篇文章主要介绍了使用@RequestParam 绑定List参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 基于bufferedreader的read()与readline()读取出错原因及解决

    基于bufferedreader的read()与readline()读取出错原因及解决

    这篇文章主要介绍了bufferedreader的read()与readline()读取出错原因及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot+Mybatis实现Mapper接口与Sql绑定几种姿势

    SpringBoot+Mybatis实现Mapper接口与Sql绑定几种姿势

    通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接口就可以执行对应的sql,感兴趣的可以学习一下
    2021-09-09

最新评论