JAVA高级阶段复习(一)IO流_缓冲流_装饰模式与代理模式

本文深入探讨了Java中的字节流和字符流,包括字节流的字节传输原理和字符流的字符处理方式。详细解析了四个抽象基类和相关接口,如Closeable和Flushable。同时,提到了FileOutputStream的构造方法和文件追加特性,以及系统换行符。文章还介绍了装饰设计模式的概念,并通过对比代理模式阐述了其特点和应用场景,强调了装饰模式在功能拓展上的灵活性。
摘要由CSDN通过智能技术生成

字节流:以一连串的01二进制进行传输,单位是字节;0000 0000(八个二进位)

读入一个字节,就相当于读入8个二进位,然后以int的形式返回0-255;

字符流:以为一连串的字符文件,单位是字符(可以理解为一种文化符号,你好,ABC,の)

(一般不同的字节数代替一个字符,中文三个UTF-8吗似乎)

 四个抽象基类

 父类基类接口(closable-autoClosable,flushable(写出的时候缓存刷新,把缓存数据的数据写出去))

 计算机内部语言都是以二进制存储,这里说的位相当于一个二进制数。JAVA里给int类型分配4个字节的存储空间,相当于32位二进制数,8个低位就是b的右边8位,24个高位也就是左边24位。
你看十进制,从右到左是个十百千万,越右边的位权值越小,所以叫低位。二进制也是同理。

总结,也就是只读0-255的int数,超过的忽略.2^8

 FileOutputStream 构造方法

append代表文件追加

三个字节(24位)代表一个中文,偏移一个字节,就会乱码(1个字节8位,24位)

系统换行符:system.lineSeparator

--------

网址url其实是访问IP地址加端口号;

 

 把需要打开资源的放到()里面;会自动close(前提是实现了autoclose接口)

 --------------------------------(读和写的无参方法【write();read();】都是读入写出一个字节,也就是8位,也就是0-255的int值,也就是在缓存中存入一个或者写出一个int,也就是返回值是一个int整数!);而char数组搬运的时候,“返回值”是读入字节的数量!-------------------------------------------

字节输入流

抽象基类:inputStream(读入没有flush接口)

从此文件中读取一个数据字节。以整数形式返回此字节,以8位的二进制(范围在 0 到 255)

//读一个字节,字节:a;一个字节由八个二进制数构成,0-255的直接值;

 猜测会连续向下读,应该是因为指针

 

 ---------------------

read(char【】)方法;

 

两个细节;数据已经被存储到bytes数组里面了,数组长度是1024,

但是实际填充的只有实际读入的数4(abcd)

 ---------

 也就是读入的时候bytes数组没有被清空,按顺序添加了两个,后两个就读入了

:in.read(bytes)的返回值是个数,代表了读入了几个,数值储存在bytes中;

 猜测是不是随着指针走动,将数据读到了内存里;(应该是)

 读到一个,输出一个;因为这里用的read()空参,读进来的是0-255的值,而不是个数

 这里的readCount是返回个数,超过了就等于-1;(调用的本地方法,但是可以想是char数组插入空值的时候,返回-1就好了)

注:无参的read返回的是编码值。而有参的返回的是读入的个数;

----------------------------------------

bufferoutputStream

仅仅是提供了一个额外的缓冲区;处理流提供缓冲区,真正工作的还是节点流

默认缓冲区大小:8k;

注意:带缓冲的输出流记得要flush; 

close默认flush操作;

 ------------------------

装饰设计模式;

 

成员变量,要用一个set方法,把奶茶放进去,让变量指向奶茶,之后利用add方法,此时就会执行奶茶的add和自身的add方法;

 重点是这个构造器要指向实参;

个人想法和代理模式的区别:代理模式利用构造器,得到的一个新的对象;所以得到的功能是已经写完的拓展的功能;代理的类;

而装饰设计模式,主要是体现功能的拓展,一个类可以实现所有装饰器的功能;

(重点是在装饰器类里的成员变量是基类(利用父类声明子类实例化);然后再继承装饰功能的类里,要调用基类的功能(此时是奶茶,每次调用用的add是奶茶的)),

之后在装饰类里添加新的功能(),set方法里面调用自身的add方法;

每次要添加新的功能,就生成装饰类的实例,然后把要装饰的类,丢进去

 

 每次传入参数调用add的时候,就会执行一次自己的add与传入的add;

//重写一个read功能,对其做一个修饰,这样调用父类的read的时候,传入的实例,就会执行这个功能;

 :代理类获得对象,调用方法,会事先自己的方法,与构造器里被代理类的方法;

:装饰类获得对象,构造器中,放入被装饰类,调用方法,会调用自身方法与被装饰类方法;
上图来源:   装饰器模式和代理模式的区别 - yanggb - 博客园代理模式和装饰器模式很像,这里用【到咖啡馆喝咖啡】作例子来讲解。 基础实现 定义一个咖啡的接口。 定义一个苦咖啡的实现。 定义一个默认的点咖啡逻辑。 装饰器模式 你喝了一口咖啡,觉得有点苦,于是你就想https://www.cnblogs.com/yanggb/p/10952843.html

 总之代理模式,是利用一个生成的新的对象完成功能拓展,而代理模式则是对一个对象进行修饰;

装饰:传入一个coffee,添加额外属性糖

装饰,直接略过咖啡,生成一个带糖的咖啡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值