[javaSE] IO流(装饰设计模式)】的更多相关文章

装饰设计模式:当想要对已有的对象进行功能增强时,可以自定义类将已有的对象传入,并提供加强功能,自定义的该类称为装饰类 典型的: Reader--FileReader --BufferedReader class Decorator{ public void eat(){ System.out.println("吃饭"); } } public class DecoratorDemo extends Decorator{ public DecoratorDemo() { } public…
java.io.File类(文件和目录路径名的抽象表示形式) 如果希望在程序中操作文件和目录都可以通过File类来完成,File类能新建.删除.重命名文件和目录. File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流. File类代表磁盘或网络中某个文件或目录的路径名称, 但他不能直接通过File对象读取和写入数据,如果要操作数据,需要IO流.就好比“地址”不代表“水库”,要“存取”里面的水到你“家里”,需要“管道…
之前我们使用io流,都是需要一个中间数组,管道流可以直接输入流对接输出流,一般和多线程配合使用,当读取流中没数据时会阻塞当前的线程,对其他线程没有影响 定义一个类Read实现Runable接口,实现run()方法,构造方法传递PipedInputStream对象 读取流里面的数据 定义一个类Write实现Runable接口,实现run()方法,构造方法传递PipedOutputStream对象 写入流里面数据 获取PipedInputStream对象,new出来 获取PipedOutputStr…
写入 获取ObjectOutputStream对象,new出来,构造参数:FileOutputStream对象目标文件 调用ObjectOutputStream对象的writeObject()方法,参数:要保存的对象 调用ObjectOutputStream对象的close()方法,关闭流 此时会报异常,NotSerialzeableException,是因为目标类没有实现Serializable接口,这个接口没有方法,称为标记接口,会在改变类之后,生成新的序列号,保存的文件读取时会显示错误信息…
获取File对象,new出来,构造参数:String目录名 调用File对象的list()方法,获取String[]数组文件名称 循环数组,列出所有文件包含隐藏文件 递归列出所有的数据 定义一个静态方法showDir(),传递进参数:FIle对象 调用File对象的listFiles()方法,得到File[]数组 循环File[]数组,每个元素是File对象 循环中,调用File对象的isDirectory()方法,判断是否是一个目录,如果是目录,再次调用showDir()方法,参数:File对…
随机访问文件,可以看作一个大型的byte[]数组,不算是IO体系中的一员,内部封装了字节输入输出流,可以设置权限,可以调整指针的位置 获取RandomAccessFile对象,构造参数:String文件名称,String的文件模式 调用RandomAccessFile对象的write()方法,参数:byte[]数组 获取RandomAccessFile对象,构造参数:String文件名称,String的文件模式 调用RandomAccessFile对象的seek()方法,调整指针位置,参数:in…
递归方法,实现查找目录中以.java为后缀的文件路径,并存入文本文件中 定义一个静态方法fileToLine(),传入参数:File对象目录,List集合对象(List<File> 这样做的目的是因为这个方法会被递归,因此不能在内部创建,并且List集合是引用传递) 调用File对象的listFiles()方法,获取目录数组File[] files 循环这个数组for(File file : files),循环中 判断是否是目录file.isDirectory为真,进行递归fileToLine…
1.IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出. 2.FileReader FileReader类的read()方法可以按照字符大小读取 FileReader fr = new FileReader("aaa.txt"); //创建输入流对象,关联aaa.txt int ch; while((ch = fr.read()) != -1) {…
IO流(字符流FileReader) IO流(字符流FileWriter) IO流(字符流的拷贝) IO流(什么情况下使用字符流) IO流(字符流是否可以拷贝非纯文本的文件) IO流(自定义字符数组的拷贝) IO流(带缓冲的字符流) IO流(readLine()和newLine()方法) IO流(将文本反转) IO流(LineNumberReader) IO流(装饰设计模式) IO流(使用指定的码表读写字符) IO流(转换流图解) IO流(获取文本上字符出现的次数) IO流(试用版软件) Fil…
本文粗略的介绍下JavaIO的整体框架,重在解释BufferReader/BufferWriter的演变过程和原理(对应的设计模式) 一.JavaIO的简介 流按操作数据分为两种:字节流与字符流. 流按流向分为:输入流(读),输出流(写). 字符流由来就是:早期的字节流+编码表,为了更便于操作文字数据. 记住:只要是操作字符数据,应该优先使用字符流. 字节流的抽象基类:InputStream ,OutputStream. 字符流的抽象基类:Reader , Writer. 二.JavaIO中的流…
声明:本文部分图片及内容引用自:https://www.cnblogs.com/qiumingcheng/p/5219631.html java装饰器设计模式 举一个形象的例子,人可以说话,而扩音器可以对人说的话进行扩音.所以扩音器就是一个装饰器. java中就有一套在这样的场景专门使用的设计模式——装饰器模式. 装饰器模式的结构 装饰器的特征: 它必须具有一个装饰的对象. 它必须拥有与被装饰对象相同的接口. 它可以给被装饰对象添加额外的功能. 总结一下就是:保持接口,增强性能. 举一个装饰器的…
在java IO 流中我们经常看到这样的写法: ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(new FileOutputStream("obj.ser"))); 这其实就是IO流使用装饰设计模式,装饰设计模式通常包含: 1.抽象的组件(抽象类或接口) 2.具体的组件:需要装饰的对象 3.抽象的装饰:包含了对抽象组件的引用以及装饰着共同的方法 4.具体的装饰类:被装饰的对象 下面模拟咖…
一:摘要 通过对java的IO类中我们可以得出:IO源码中使用装饰设计模式频率非常高, 对装饰设计模式而言,他能够避免继承体系的臃肿,同时也可以动态的给一个对象添加一些额外的功能,如果要扩展一个功能,装饰设计模式提供了比继承更具有弹性的设计方案,当然还有动态代理模式,三者都是对现有有的功能进行改造. 二.案例: 1.针对Reader这个类而言,我们可以看到使用的装饰设计模式之一是: BufferedReader br=new BufferedReader(new FileReader("c:\\…
IO装饰设计模式:(IO中使用了装饰设计模式) 节点流可以直接从源读取数据,处理流就是对节点流的包装,这就是装饰,装饰就是对原有的流的性能的提升.比如买的车,马力不够,就进行装饰,使其马力增大. 装饰模式: 扩音器对声音进行了扩大. 类与类之间的关系(6种): .依赖:一个对象是形参或者局部变量,只有调用方法的时候才会依赖这个类. .关联:一个对象是属性.关联分为: 聚合:是属性 整体与部分关系, 不一致的生命周期, 人与手 组合:是属性 整体与部分关系, 一致的生命周期, 人与大脑 .继承:父…
流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输入流的谱系如下所示: InputStream和OutputStream InputStream和OutputStream分别是输入输出流的顶级抽象父类,只定义了一些抽象方法供子类实现. 在输出流OutputStream中,如果你需要向一个输出流写入数据,可以调用 void write(int b)…
今天把IO流的这一知点进行一下总结,因为在之前使用io流的时候,就只知道几个重点常用的IO类,比如FileInputStream,BufferedInputStream(缓冲流)等等,但是不知道它处于整个IO体系中的什么位置,对于其中的整个IO体系一点不了解,每次使用的时候都需要百度查看用法例子,这就说明自己对这块的知识有所欠缺,所以今天,来详细的分析,解剖一下IO的整个结构. 借鉴博文:http://www.cnblogs.com/skywang12345/p/io_01.html  该博主写…
IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStream OutputStream 字符流的抽象基类:Reader,Writer 由这四个类派生出来的子类名称都是以其父类作为子 类名的后缀. 如InputStream 的子类 FileInpuStream Reader的子类FileReader 数据的最常见的形式是:文件 字符读取缓冲区: class…
java IO流的设计是基于装饰者模式&适配模式,面对IO流庞大的包装类体系,核心是要抓住其功能所对应的装饰类. 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象.装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任.换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同.装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展.装饰模式把客户端的调用委派到被装饰类.…
装饰器模式,也成为包装模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能.其结构图如下: Component为统一接口,也是装饰类和被装饰类的基本类型. ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类. Decorator是装饰类,实现了Component接口的同时还在内部维护了一个ConcreteComponent的实例,并可以通过构造函数初始化.而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用…
IO流:用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节流和字符流. 字节流:处理字节数据的流对象.设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的.二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节.意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据. 那么为什么要有字符流呢?因为字符每个国…
java使用IO流来处理不同设备之间数据的交互;所有的IO操作实际上都是对 Stream 的操作 从功能上划分: 输入流: 当数据从源进入的编写的程序时,称它为输入流; 输出流: 从程序输出回另一个源成为输出流; 输入与输出是有参照物的,而这个参照物就是应用程序本身 从结构上划分: 总体的大纲分为两部分,字节流和字符流的封装类体系 首先说: 什么是字节流? 按照字节读取的流对象,一次读取一个字节 1字节 占八位 一个数字占四个字节, (前三个八位补0) 什么是字符流? 按照字符读取的流对象,一次…
装饰设计模式就是对已有的对象的功能进行增强 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装饰的对象.并基于被装饰的对象的功能,提供更强的功能. 例如:你有个对象有个功能 是在N年前建立的,如今你觉得功能不够用了 写个类把对象传进来就可以解决问题了 如果这个功能写错了 我就把自己写的功能去掉又不影响以前的功能灵活性相当强的. 装饰模式比继承要灵活.避免了继承体系臃肿.而且降低了类于类之间的…
一.IO流概要 1.1.概念 开发中经常要进行输入输出操作,掌握Java中的IO流显得非常必要. 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL. 流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流.用户可以从输入流中读取信息,但不能写它.相反,对输出流,只能…
知识点:什么是装饰模式: http://wenku.baidu.com/view/ad4eac9f51e79b896802263b.html(原理讲的很清楚) http://wenku.baidu.com/view/a44f2ef2b8f67c1cfad6b8bb.html (例子很不错) java io 流 设计模式:装饰模式和适配器模式 http://blog.csdn.net/wong_judy/article/details/5262104 (主要讲解装饰模式) http://wenku…
1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有输入流类都是抽象类,是InputStream或者抽象类Reader的子类:而所有输出流都是抽象类,是OutputStream或者Writer的子类.输入输出流的定义是根据流向所决定的,我们可以是本地为一个实体物质,从外界往本地输入,按照本地的状态就是读取,反之,从本地向外写入就是输出.IO流是最基本…
在总结 Java Basic IO 时,发现 java.io 包的相关类真心不少--.看到一堆"排山倒海"般的类,我想,唯有英雄联盟中小炮的台词才能表现此刻我的心情: 跌倒了没?崩溃了没? 学 Java 的,学过装饰者模式一般都知道一个典型的应用:Java 的基本 IO 使用了装饰者模式(更多的 JDK 中使用的设计模式,请点我).也因此知道了为什么 io 包里为什么会有这么多的类--,引用<HeadFirst 设计模式>的话: Java I/O 也引出装饰者模式的一个&q…
定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.                  这一个解释,引自百度百科,我们注意其中的几点. 1,不改变原类文件.                  2,不使用继承.                  3,动态扩展. 上述三句话一语道出了装饰器模式的特点,下面LZ给出装饰器模式的类图,先上图再解释. 从图中可以看到,我们装饰的是一个接口的任何实现类,而这些实现类也包括了装饰…
我们按功能可以将IO流分为节点流与处理流 节点流:可以直接从数据源或目的地读写数据 处理流(装饰流):不直接连接到数据源或目的地,是其他流(必须包含节点流)进行封装.目的主要是简化操作和提高性能. Buffered流的引入 当我们使用节点流来传输数据时,节点流单次传输的数据太少,会频繁读写硬盘,这使得整体速度不高,就像蚂蚁搬家. 这时我们引入处理流Buffered流,就好像找来一辆卡车来搬家,单次运输的数据多了,访问硬盘的次数少了,速度得到提升. copy文件示例 不引入Buffered流cop…
JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例. public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例. public File(F…
前面我们学习的了多线程,今天开始要学习IO流了,java中IO流的知识非常重要.但是其实并不难,因为他们都有固定的套路. 一.流的概念     流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备可以是文件,网络,内存等    流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,如果数据的流向是设备至程序称为输入流.    数据以二进制的形式在程序与设备之间流动传…