Java IO-InputStream家族 -装饰者模式】的更多相关文章

流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输入流的谱系如下所示: InputStream和OutputStream InputStream和OutputStream分别是输入输出流的顶级抽象父类,只定义了一些抽象方法供子类实现. 在输出流OutputStream中,如果你需要向一个输出流写入数据,可以调用 void write(int b)…
最近看到一篇文章,初步介绍java.io.InputStream,写的非常通俗易懂,在这里我完全粘贴下来. 来源于 https://mp.weixin.qq.com/s/hDJs6iG_YPww7yeiPxmZLw 在学习java.io.*包的时候,Input-Stream那一群类很让人反感,子类繁多就不用说,使用起来非常奇怪.我们想以缓存的方式从文件中读取字节流.总要先创建一个FileInput-Stream,然后把这个File-InputStream放入Buffered-InputStrea…
成功代码: 前台界面jsp: <a style="text-decoration:none;" href="<%=path %>/main/frontNewsAction_downloadFile.action?fileName=<s:property value="fileTitle"/>">下载</a> Action文件:private String fileName;//get set方法 p…
今天在用struts2就行文件下载时出现如下错误: Servlet.service() for servlet default threw exception java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] in the invocation stack. Check the <param name="inputName">…
package 文件操作; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class TestInputStream { public static void main(String[] args) throws IOException { File file=new File("D:"+File.se…
JAVA设计模式之[装饰者模式] 装饰模式 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用. 在软件设计中,对已有对象(新房)的功能进行扩展(装修). 把通用功能封装在装饰器中,用到的地方进行调用. 装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系.引入装饰类,扩充新功能. 角色 抽象构件 具体构件 抽象装饰类 具体装饰类 案例一,窗体装饰 1.组件类 package Decorator; // 装饰者模式 /** * Created b…
项目运行的时候,如果报错 Error: Default interface methods are only supported starting with Android N (--min-api 24): java.io.InputStream org.apache.poi.sl.usermodel.ObjectShape.readObjectData() 解决方案: 在app的build.gradle文件中添加以下代码 apply plugin: 'com.android.applicat…
1.错误描写叙述 八月 14, 2015 4:22:45 下午 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error 严重: Exception occurred during processing request: Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check the <param name=…
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.csdn.net/qq_27093465/article/details/53323187 代理模式和装饰者模式的区别: https://www.cnblogs.com/panxuejun/p/6127832.html 这篇文章干货没有第一篇那么多,主要的结论就是: 装饰模式:以对客户端透明的方式扩展…
java使用IO流来处理不同设备之间数据的交互;所有的IO操作实际上都是对 Stream 的操作 从功能上划分: 输入流: 当数据从源进入的编写的程序时,称它为输入流; 输出流: 从程序输出回另一个源成为输出流; 输入与输出是有参照物的,而这个参照物就是应用程序本身 从结构上划分: 总体的大纲分为两部分,字节流和字符流的封装类体系 首先说: 什么是字节流? 按照字节读取的流对象,一次读取一个字节 1字节 占八位 一个数字占四个字节, (前三个八位补0) 什么是字符流? 按照字符读取的流对象,一次…
刚开始接触装饰者的设计模式,感觉挺难理解的,不够后来花了一个晚上的时间,终于有头绪了 装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行为,这个类就叫装饰者类.被修饰的类叫被装饰者类,是已经存在有的功能.在装饰者类之间又可以互相装饰 特点:          1.装饰类通过构造方法来接收被装饰者的对象,调用它里面的功能或行为          2. 基于对被装饰对象的功能进行扩展,提供更强大的功能 Java中的IO流是典型的装饰者模…
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生子类来扩展,抑或是使用对象组合的方式.显然,直接修改对应的类的方式并不可取,在面向对象的设计中,我们应该尽量使用组合对象而不是继承对象来扩展和复用功能,装饰器模式就是基于对象组合的方式的. 装饰器模式以对客户端透明的方式动态地给一个对象附加上了更多的责任.换言之,客户端并不会角色对象在装饰前…
1.介绍 装饰器模式顾名思义就是装饰某个对象的,是一种结构型模式.装饰器模式允许向一个现有对象添加新的功能,同时不改变其结构,用户可以随意的扩展原有的对象.它是作为现有的类的一个包装.装饰器模式一方面替代了继承,相对于继承带来的静态的功能扩展,装饰器模式可以理解为动态的功能扩展,非常灵活.但是由于动态扩展带来方便的同时也带来了缺点:在装饰过程中,其实创建了很多的对象占据内存资源,这些对象都很相似,排查错误也是有很大困难. 举例来说:比如有一根电线,现在只有铜丝,只不过现在只能导电,我们在他的外面…
1.I/O分类与装饰者模式 基本java I/O包含两种类型的流,字节流(inputStream.outputStream)与字符流(Writer,Reader),关于I/O操作类的设计,用到了装饰者模式,如下图所示. 其中FilterInputStream抽象类继承了InputStream抽象类,并且组合了InputStream类. public class UpperCaseInputStream extends FilterInputStream { //继承InputStream //组…
装饰者: Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案. 装饰者模式意图: 动态的给一个对象添加额外的职责.Decorator比生产子类灵活. 设计原则: 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展 类应设计的对扩展开放,对修改关闭. 要点: 1.装饰者和被装饰对象有相同的超类型. 2.可…
定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的. 要点: 装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为 实际上Java 的I/O API就是使用Decorator实现的. //定义被装饰…
1.1定义 慨念:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 即:主题和观察者定义了一对多的关系,观察者依赖于主题,只要主题发生变化,观察者就会被通知. 目的:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作. 1.2 底层机制 将一个状态会发生改变的对象定义成主题,所有的依赖对象定义为观察者.建立主题接口,对象使用该接口注册为观察者,或者把自己从观察者中删除.定义一个具体的主题类实现主题接口.建立观察者接口…
装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案: 代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用: 装饰模式为所装饰的对象增强功能:代理模式对代理的对象施加控制,并不提供对象本身的增强功能 简而言之,装饰者是指的是自身,对功能的增强,而另一种是调用接口,实现对代理对象的控制 在Spring AOP中,主要使用了两种代理方式:jdkProxy.cjlibProxy cjlibProxy: package com.cjlib; import org.…
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固定的流程编写出流水式的代码外,很难去思考整套功能服务的扩展性和可维护性.尤其是在一些较大型的功能搭建上,比较缺失一些驾驭能力,从而导致最终的代码相对来说不能做到尽善尽美. 江洋大盗与江洋大偷 两个本想描述一样的意思的词,只因一字只差就让人觉得一个是好牛,一个好搞笑.往往我们去开发编程写代码时也经常将…
装饰者模式的定义 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案  装饰者模式的UML类图 一般来说装饰者模式有下面几个参与者: Component:装饰者和被装饰者共同的父类,是一个接口或者抽象类,用来定义基本行为 ConcreteComponent:定义具体对象,即被装饰者 Decorator:抽象装饰者,继承自Component,从外类来扩展ConcreteComponent.对于ConcreteComponent来说,不需要知道Decorator的存在,De…
装饰模式 : 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用.    在软件设计中,对已有对象(新房)的功能进行扩展(装修).    把通用功能封装在装饰器中,用到的地方进行调用. 装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系.引入装饰类,扩充新功能.    角色    .抽象构件   . 具体构件   . 抽象装饰类  .  具体装饰类 案例一,窗体装饰 1.组件类 package Decorator; // 装饰者模式 /** *…
程序的开发其中一直在用文件的读写.可是对于java其中输入流以及输出流仅仅是会用不理解,一直以来想搞清楚其,可是一直没有运行(悲剧).今天早上抽出半个小时通过JDK API1.6.0中文版帮助逐步的了解下字节输入流读取字节的方法. 以下就说说InputStream其中read().read(byte[]  b).read(byte[] b.int off .int len)的使用以及差别 一.read()方法: public static void inputStreamRead1() {  …
InputStream is ; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int len = 0; while((len = is.read(b)) != -1) { baos.write(b,o,len); } baos.toByteArray();…
1.装饰器模式的定义(保持接口,扩展功能) Decorate装饰器,顾名思义,就是动态的给一个对象添加一些额外的职责,就好比对房子进行装修一样. 2.装饰器模式的特征 具有一个装饰对象. 必须拥有与被装饰对象相同的接口. 可与给被装饰对象添加额外的功能. 3.装饰器模式的典型应用,java.io包 4.装饰器模式的代码示例 /** * @Author long * @Date 2019/3/20 21:29 */ public interface SourceAble { void operat…
装饰模式的定义: 动态地将责任附加到对象向,若要扩展功能,装饰模式提供了比继承更有弹性的替代方案. 遵循的设计原则是开闭原则,也是对扩展开放,对修改关闭. 下面是类图 示例代码 /** *定义被装饰者 * */ public interface Human { public void wearClothers(); public void walkToWhere(); } /** * 定义抽象装饰者 * */ public abstract class Decorate implements H…
  问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: 如下例子代码: FileInputStream is = new FileInputStream("."); BufferedInputStream bis = new BufferedInputStream(is); bis.close(); 从设计模式上看: java.io.Buff…
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt381 问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: 如下例子代码: 1 2 3   FileInputStream is = new FileInputStream(".");      BufferedInput…
目录 一. 数据源(流) 二. 数据传输 三. 总结 我们从两个方面来理解Java IO,数据源(流).数据传输,即IO的核心就是对数据源产生的数据进行读写并高效传输的过程. 一. 数据源(流) 数据源可以理解为水源,指可以产生数据的事物,如硬盘(文档.数据库等文件...).网络(填写的form表单.物联感知信息..),在Java中有对文件及文件夹操作的类File,常用的文件方法如下: public static void printFileDetail(File file) throws IO…
本文写在po主初学JAVA时,在学习inputStream摸不着头脑,受Java IO-InputStream家族 -装饰者模式一文启发,所以在理清思路时写下本文.因为初学,如有错误,望指正. 因为和输入流与之对应的还有输出流(即OutputStream),在此只针对输入流InputStream讨论. 1. 家族老大: 一说起家族中的老大,InputStream自然是当仁不让,在java的输入流操作的类中,衍生出的基本子类有,可以理解为这些都是InputStream它的孩子(子类): Input…