字节流:以一连串的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,添加额外属性糖
装饰,直接略过咖啡,生成一个带糖的咖啡