Java I/O---添加属性和有用的接口—FilterlnputStream&FilterOutputStream

Posted zhuweiheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java I/O---添加属性和有用的接口—FilterlnputStream&FilterOutputStream相关的知识,希望对你有一定的参考价值。

0.装饰器模式

       Java I/O类库需要多种不同功能的组合,这正是使用装饰器模式的理由所在。这也是Java I/O类库里存在filter(过滤器)类的原因所在,抽象类filter是所有装饰器类的基类。装饰器必须具有和它所装饰的对象相同的接口,但它也可以扩展接口,而这种情况只发生在个别  filter类中。

       但是,装饰器模式也有一个缺点:在编写程序时,它给我们提供了相当多的灵活性(因为我们可以很容易地混合和匹配属性),但是它同时也增加了代码的复杂性。Java I/O类库操作不便的原因在于:我们必须创建许多类一一“核心”I/O类型加上所有的装饰器,才能得到我们所希望的单个I/O对象。

1.FilterlnputStreamFilterOutputStream

       FilterlnputStreamFilterOutputStream用来提供装饰器类接口以控制特定输入流( InputStream)和输出流(OutputStream)的两个类,它们的名字并不是很直观。FilterInput-Stream和FilteOutputStream分别自I/O类库中的基类InputStreain和OutputStream派生而来,这两个类是装饰器的必要条件(以便能为所有正在被修饰的对象提供通用接口)。

(1)JDK API 中 FilterlnputStream类

技术分享图片

技术分享图片

技术分享图片

(2)JDK API 中 FilterOutputStream

技术分享图片

技术分享图片

技术分享图片

2.BufferedInputStream & BufferedOutputStream

        BufferedInputStream是带缓冲区的输入流,默认缓冲区大小是8M,能够减少访问磁盘的次数,提高文件读取性能;

        BufferedOutputStream是带缓冲区的输出流,能够提高文件的写入效率。

        BufferedInputStream与BufferedOutputStream分别是FilterInputStream类和FilterOutputStream类的子类,实现了装饰设计模式。下面是例子演示使用BufferedInputStream和BufferedOutputStream实现照片复制

  1 public class CopyPicByBuffer {
  2 
  3 	public static void main(String[] args) throws IOException {
  4 		/**
  5 		 * 使用BufferedInputStream和BufferedOutputStream实现照片复制
  6 		 */
  7 		copyPicByBuffer();
  8 	}
  9 
 10 	private static void copyPicByBuffer() throws IOException {
 11 		// TODO Auto-generated method stub
 12 		//演示缓冲区
 13 		//1.创建输入流对象
 14 		FileInputStream fis = new FileInputStream("H:\\\\workspace\\\\Testfile\\\\1.jpg");
 15 		BufferedInputStream bufis = new BufferedInputStream(fis);//装饰设计模式
 16 
 17 		//2.创建输出流对象
 18 		FileOutputStream fos = new FileOutputStream("H:\\\\workspace\\\\Testfile\\\\1-copybybuffer.jpg");
 19 		BufferedOutputStream bufos = new BufferedOutputStream(fos);//装饰设计模式
 20 
 21 		int by = 0;
 22 		while((by = bufis.read()) != -1){
 23 			bufos.write(by);
 24 			bufos.flush();//刷新
 25 		}
 26 		fos.close();
 27 		fis.close();
 28 		System.out.println("复制结束!");
 29 	}
 30 }
 31 

2017-12-31 内容来自Java编程思想和传智播客课程

BufferedInputStream与BufferedOutputStream用法简介

 

 

 

 

以上是关于Java I/O---添加属性和有用的接口—FilterlnputStream&FilterOutputStream的主要内容,如果未能解决你的问题,请参考以下文章

Thinking in java Chapter18 IO

File I / o

深入分析Java I/O的工作机制

初探java I/O 工作机制

S2/JAVA/10-File I/O

S2/JAVA/10-File I/O