学习笔记
字符流缓冲区
缓冲区的出现提高了对数据的读写效率
对应类
BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前必须要先有流对象
为了提高字符的写入流效率,加入了缓冲技术,只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
只要用到缓冲区,就要记得刷新
其实关闭缓冲区就是在关闭缓冲区中的流对象。
BufferedWriter
该缓冲区中提供了一个跨平台的换行方法 newLine()写入一个行分隔符
BufferedReader
该缓冲区提供了一个一次读一行的方法readline(),范便于对文本数据的获取,当返回空时表示读到文件末尾
readline方法返回的时候只返回回车符之前的内容、并不返回回车符和任何行终止符
readLine方法的原理
无论是读一行获取读取多个字符。其实最总都是在硬盘上一个一个读取。所以最总是用的还是read方法一次读一个的方法。
*********************************
装饰设计模式
当想要对已有的对象进行功能增强时,可以定义类将已有对象传入,基于已有对象的功能,并提供加强功能那么自定义的该类就称为装饰类
装饰类通常会通过构造方法接收被装饰对象。并基于被装饰对象的功能,提供更强的功能
装饰模式比继承灵活,避免了集成体系臃肿,而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有类是相同的,只不过提供了更强的功能,所以装饰类和被装饰类是都属于同一个体系的(都集成同一个类或实现同一个接口)
*********************************
BufferedReader的子类
LineNumberReader 带行号的装饰类
练习:模拟一个带行号的缓冲区对象
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
字节流
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
基本和字符流差不多 具体看API
练习:拷贝一个图片
111111 --》 提升了一个int类型 还是-1
是-1的原因是因为在8个1前面补的是1导致的
想在前面补0,即可以保留原字节数据不变,又可以避免-1的出现
字节流的write方法只写最低8位数据
键盘录入
System.out:对应的是标准的输出设备
System.in:对应的是标准的输入设备(键盘)
InputStreamReader
是字节流通宵字符流的桥梁:使用指定的charset读取字节并将其解码为字符。
键盘录入的最常见写法
BufferedReader bufr = new BufferedReader(new InputStringReader(System.in));
流操作的基本规律
最痛苦的就是流对象有很多,不知道该用哪一个
通过两个明确来完成
1.明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2.确定操作的数据是否为纯文本
是:字符流
不是:字节流
3.当体系明确后,再明确要使用具体的哪个对象。通过设备来区分。
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
练习:将一个图片文件中当数据存储到另一个文件中、复制文件按照视频个好似完成三个明确
如何将想录入的数据按照指定的编码表储存
通过指定编码表来完成,只有转换流可以指定编码表,所以要使用转换流来完成
什么时候使用转换流?
字符和字节之间的桥梁,通常设计到字符编码转换时,需要用到转换流
练习:讲一个文本数据打印在控制台上,按照视频上的格式,完成三个明确
改变标准输入输出设备
System.setIn
System.setOut
8万+

被折叠的 条评论
为什么被折叠?



