使用缓冲字节流:BufferedInputStream与BufferedOutputStream读写数据

本文介绍了一种利用缓冲字节输入输出流进行视频文件高效拷贝的方法,并通过实验优化了缓冲区大小及字节数组大小,显著提高了拷贝速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能逻辑:将一个视频文件通过缓冲字节输入流进行读取,然后再通过缓冲字节输出流将其重新拷贝输出。

	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("Rick_and_Morty.mkv");
			//第二个参数指定了缓冲区的size,根据实际的执行时间可以优化这个数字。
			BufferedInputStream bis = new BufferedInputStream(fis,1000000);
			FileOutputStream fos = new FileOutputStream("Rck.mkv");
			BufferedOutputStream bos = new BufferedOutputStream(fos,1000000);
			//byte数组会先从缓冲区取得数据,大型文件对应的数据可以大一些,小文件对应的数组可以小一些。
			byte[] input = new byte[1000000];
			int count = 0;
			long before = System.currentTimeMillis();
			//while循环读取视频文件,-1代表已经将文件的字节流全部读取了,!=-1则文件继续读取
			while (bis.read(input) != -1) {
				bos.write(input);
				count++;
			}
			//输入流一组,输出流一组,先打开的流后关闭
			bis.close();
			fis.close();
			bos.close();
			fos.close();
			long after = System.currentTimeMillis();
			System.out.println("读取时间为:" + (after - before) + "ms");
			System.out.println("访问磁盘:" + count + "次");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

此例简单的实现了一个视频文件从输入到输出的过程,视频文件大小为301,199,257  bytes,执行结果如下:

读取时间为:450ms
访问磁盘:302次

这是通过多次改变字节数组的大小和缓冲区初始大小得出的较优结果,在实际应用中,可以多次进行尝试。

而且在实际应用中,带缓冲的字节输入输出流性能要优于不带缓冲区的字节输入输出流。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值