Java I/O---添加属性和有用的接口—FilterlnputStream&FilterOutputStream
0.装饰器模式
Java I/O类库需要多种不同功能的组合,这正是使用装饰器模式的理由所在。这也是Java I/O类库里存在filter(过滤器)类的原因所在,抽象类filter是所有装饰器类的基类。装饰器必须具有和它所装饰的对象相同的接口,但它也可以扩展接口,而这种情况只发生在个别 filter类中。
但是,装饰器模式也有一个缺点:在编写程序时,它给我们提供了相当多的灵活性(因为我们可以很容易地混合和匹配属性),但是它同时也增加了代码的复杂性。Java I/O类库操作不便的原因在于:我们必须创建许多类一一“核心”I/O类型加上所有的装饰器,才能得到我们所希望的单个I/O对象。
1.FilterlnputStream和FilterOutputStream
FilterlnputStream和FilterOutputStream用来提供装饰器类接口以控制特定输入流( InputStream)和输出流(OutputStream)的两个类,它们的名字并不是很直观。FilterInputStream和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实现照片复制:
public class CopyPicByBuffer {
public static void main(String[] args) throws IOException {
/**
* 使用BufferedInputStream和BufferedOutputStream实现照片复制
*/
copyPicByBuffer();
}
private static void copyPicByBuffer() throws IOException {
// TODO Auto-generated method stub
//演示缓冲区
//1.创建输入流对象
FileInputStream fis = new FileInputStream("H:\\workspace\\Testfile\\1.jpg");
BufferedInputStream bufis = new BufferedInputStream(fis);//装饰设计模式
//2.创建输出流对象
FileOutputStream fos = new FileOutputStream("H:\\workspace\\Testfile\\1-copybybuffer.jpg");
BufferedOutputStream bufos = new BufferedOutputStream(fos);//装饰设计模式
int by = 0;
while((by = bufis.read()) != -1){
bufos.write(by);
bufos.flush();//刷新
}
fos.close();
fis.close();
System.out.println("复制结束!");
}
}
2017-12-31 内容来自Java编程思想和传智播客课程
BufferedInputStream与BufferedOutputStream用法简介
Java I/O---添加属性和有用的接口—FilterlnputStream&FilterOutputStream的更多相关文章
- JAVA“动态”为类添加属性
部分参考:http://www.cnblogs.com/zy2009/p/6725843.html pom.xml中添加: <dependency> <groupId>comm ...
- java操作xm——添加、修改、删除、遍历
package com.xml.zh; import javax.xml.parsers.*; import javax.xml.transform.Transformer; import javax ...
- PropertyGrid—添加属性Tab
零.引言 PropertyGrid用来显示和编辑对象的属性,前面已经简单介绍了如何使用该控件和提供不同的属性编辑方法.前面主要讲如何使用该控件,但有时,该控件无法满足我们的需求,就需要对其进行扩展.本 ...
- C#访问Java的WebService添加SOAPHeader验证的问题
原文:C#访问Java的WebService添加SOAPHeader验证的问题 这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebServ ...
- 我的Python学习笔记(四):动态添加属性和方法
一.动态语言与静态语言 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C ...
- 给HTML页面指定元素添加属性,添加父元素
给HTML页面指定元素添加属性,添加父元素 下面拿一个给富文本中所有的图片增加layer弹窗效果. 思路: 给富文本父元素设置属性. 获取父元素里所有的img 此处用到querySelectorA ...
- (3)java数据结构--有枚举 属性
java中的数据结构 - 南风顾 - 博客园http://www.cnblogs.com/tingxuelou/p/6686143.html 线性表,链表,哈希表是常用的数据结构,在进行Java开发时 ...
- js/java 获取、添加、修改、删除cookie(最全)
一.cookie介绍 1.cookie的本来面目 HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(key-value格式).客户端向服务 ...
- runtime-给系统已有类添加属性
在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添 ...
随机推荐
- Openning
In order to imporve my english writing skill and enhance my understanding of programming ,I'm setti ...
- mysql数据库相关知识
什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库.(来自:百度) 什么是sql? 结构化查询语言(Struct ...
- 【Java入门提高篇】Day5 Java中的回调(二)
Java中有很多个Timer,常用的有两个Timer类,一个java.util包下的Timer,一个是javax.swing包下的Timer,两个Timer类都有用到回调机制.可以使用它在到达指定时间 ...
- spring bean的创建过程
spring的核心容器包括:core.beans.context.express language四个模块.所以对于一个简单的spring工程,最基本的就是依赖以下三个jar包即可: <depe ...
- K-means 算法
本学习笔记参考自吴恩达老师机器学习公开课 聚类算法是一种无监督学习算法.k均值算法是其中应用最为广泛的一种,算法接受一个未标记的数据集,然后将数据聚类成不同的组.K均值是一个迭代算法,假设我们想要将数 ...
- Web Mining and Big Data 公开课学习笔记 ---lecture0
0.1 课程主要内容:Big data technologies , Machine Learning and AI 0.6 OUTLINE: predict the future using ...
- IK-Analyzer(5.3.1)动态配置自定义词典
参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...
- MySql基础入门-mysql的结构层次
了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的. 1.Connectors指的是不同语言中与SQL的交互 2.Management Servei ...
- PHP实现excel
导入 public function excel_put(){ //先做一个文件上传,保存文件 $path=$_FILES['file']; $filePath = "uploads/&qu ...
- SketchMaster 隐私政策
隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...