Java小白的File学习笔记(四)——BufferedInputStream&BufferedOutputStream

这篇笔记介绍了Java中的字节缓冲流BufferedInputStream和BufferedOutputStream,强调它们在IO操作中提高性能的作用。通过实例代码展示了文件复制的三种方式:单个字节读取、批量读取和使用缓冲流读取,并对比了它们的效率,突出缓冲流的优势。

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

这次的笔记关于什么呢?
BufferedInputStream&BufferedOutputStream!
对就是字节缓冲流。
这两个流类为IO提供了带缓冲区的操作,一般打开问价进行读取操作时,都会加上缓冲,这种流模式提高了IO的性能
举个例子:
从应用程序把输入的内容放入文件,就相当于把一缸水倒入另一缸中,
而FileOutputStream的write方法相当于一滴一滴的把水转移过去
DataOutputStream的write方法相当于一瓢一瓢的转移
BufferedOutputStream的write方法更方便,相当于一桶一桶的转移

还是那个复制文件内容的例子,我们来写一下代码

public static void copyByBuffered(File srcFile,File desFile) throws IOException {
		BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));
		BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desFile));
		int c;
		while((c=bufferedInputStream.read())!=-1) {
			bufferedOutputStream.write(c);
			bufferedOutputStream.flush();//刷新缓冲区
		}
		bufferedInputStream.close();
		bufferedOutputStream.close();
	}

也是非常简单的。

这节我们学习了字节缓冲流
目前我关于文件复制,我们可以用三种方式
1、单个字节读取复制
2、字节批量读取复制
3、使用字节缓冲流读取复制

好,我们一个一个来看这三个方法的复制速度:
首先来看一下测试方法

public static void main(String[] args) throws IOException{
		File file = new File("E:\\1.mp3");
		File file2 = new File("E:\\2.mp3");
		long start = System.currentTimeMillis();
		IOUtils.copuByByte(file, file2);
		//IOUtils.copyByByteArray(file, file2);
		//IOUtils.copyByBuffered(file, file2); 
		long end = System.currentTimeMillis();
		System.out.println(end - start);		
	}

第一个:单个字节读取复制,也就是IOUtils.copuByByte(file, file2);看一下代码:

//单个字节读取
	public static void copuByByte(File srcFile,File desFile) throws IOException{
		FileInputStream fileInputStream = new FileInputStream(srcFile);
		FileOutputStream fileOutputStream = new FileOutputStream(desFile);
		int b;
		while((b=fileInputStream.read())!=-1) {
			fileOutputStream.write(b);
			fileOutputStream.flush();
		}
	}

看下运行结果:在这里插入图片描述15万毫秒
第二个:字节批量读取复制

public static void main(String[] args) throws IOException{
		File file = new File("E:\\1.mp3");
		File file2 = new File("E:\\3.mp3");
		long start = System.currentTimeMillis();
		//IOUtils.copuByByte(file, file2);
		IOUtils.copyByByteArray(file, file2);
		//IOUtils.copyByBuffered(file, file2); 
		long end = System.currentTimeMillis();
		System.out.println(end - start);		
	}

//单个字节读取
	public static void copuByByte(File srcFile,File desFile) throws IOException{
		FileInputStream fileInputStream = new FileInputStream(srcFile);
		FileOutputStream fileOutputStream = new FileOutputStream(desFile);
		int b;
		while((b=fileInputStream.read())!=-1) {
			fileOutputStream.write(b);
			fileOutputStream.flush();
		}
	}

看一下运行结果:在这里插入图片描述128毫秒,速度快了不止一点点啊!!

我们看一下第三个:使用字节缓冲流读取复制

public static void main(String[] args) throws IOException{
		File file = new File("E:\\1.mp3");
		File file2 = new File("E:\\4.mp3");
		long start = System.currentTimeMillis();
		//IOUtils.copuByByte(file, file2);
		//IOUtils.copyByByteArray(file, file2);
		IOUtils.copyByBuffered(file, file2); 
		long end = System.currentTimeMillis();
		System.out.println(end - start);		
	}

//字节缓冲流读取
	public static void copyByBuffered(File srcFile,File desFile) throws IOException {
		BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));
		BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desFile));
		int c;
		while((c=bufferedInputStream.read())!=-1) {
			bufferedOutputStream.write(c);
			bufferedOutputStream.flush();//刷新缓冲区
		}
		bufferedInputStream.close();
		bufferedOutputStream.close();
	}

看一下运行结果:在这里插入图片描述9万多毫秒,速度也是很慢

现在各位应该对这三种方法的效率有一定的认识了吧

满足o( ̄︶ ̄)o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值