Java中io流的学习(三)BuffereInputStream和BuffereOutputStream

BuffereInputStream(带有缓冲区的字节输入流)继承于FilterInputStream,而FilterInputStream继承于InputStream,BuffereOutputStream(带有缓冲区的字节输出流)继承于FilterOutputStream,而FilterOutputStream继承于OutputStream,关于FilterInputStream和FilterOutputStream,其实它们只是个“装饰器模式”的封装,也就是说它并没有给出具体的功能实现,它具体的功能实现都是通过它的子类来实现的。

这两个其实主要就是一个缓冲的作用,我们知道,如果直接让文件或程序跟内存进行交互,效率是十分低下的,而通过缓冲流进行交互,能够大大提高效率,缓冲流的主要作用就是提高了效率。

对于文件的存在与否的反应,和其它一样,不存在时,输入流会报错,输出流会自动创建。

常用的方法是:read(),read(byte [] b,int off,int len),write(int b),write(byte[] b,int off,int len),close();这些具体参照InputStream和OutputStream中这些方法的使用。

下面我们通过代码实例来对其进行学习:

①利用缓冲流进行拷贝,一个一个字节拷贝

        @Test
	public void t2() throws Exception{
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("H:\\javaio\\测试.avi"),2*1024);
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("H:javaio\\测试copy2.avi"),2*1024);
		int len;
		while((len = bis.read()) != -1){
			bos.write(len);
		}
		bos.close();
		bis.close();
	}

②利用缓冲流进行拷贝,多个字节多个字节拷贝 

	@Test
	public void t1() throws Exception{
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("H:\\javaio\\测试.avi"));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("H:javaio\\测试copy1.avi"));
		byte[] b = new byte[2*1024];
		int len;
		while((len = bis.read(b)) != -1){
			bos.write(b, 0, len);
		}
		bos.close();
		bis.close();
	}

③利用缓冲流实现对文件的追加

	@Test
	public void t3() throws Exception{
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("H:\\javaio\\test.txt",true));
		bos.write("sadadas".getBytes());
		bos.close();
	}

④利用缓冲流读取文件

	@Test
	public void t5() throws Exception{
		FileInputStream fis = new FileInputStream("H:\\javaio\\qianfengwrite1.txt");
		int len;
		while((len = fis.read()) != -1){
			System.out.print((char)len);
		}
		fis.close();
	}

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/81743522