码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-31 11:59:58      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:isp   href   增加   es2017   存在   style   net   子类   todo   

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

标签:isp   href   增加   es2017   存在   style   net   子类   todo   

原文地址:https://www.cnblogs.com/zhuweiheng/p/8157152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!