知识点:
字符流:是直接读取字符的IO流
字符输入流:Reader:读的时候,是把字节转成字符,然后再读取
FileReader://字符输入流
BufferedReader:
特有方法:
public String readLine();////一次读取一行,读不到返回null,读到就返回对应的数据(String类型)
LineNumberReader://行号
setLineNumber():设置行号
getLineNumber():获取行号
字符输出流: Writer有一个2k的小缓冲区不关流会将内容写到缓冲区内,关闭流之后,就会刷新出来
FileWriter://字符输出流,在写出时,有一个缓冲区
FileWriter fw = new FileWriter(文件路径);
fw.write(字符串/单个字符);
BufferedWriter:
public void newLine();//根据当前的操作系统,给出对应的换行符.
设计模式:
概述:
实际开发中,我们发现项目中好多地方是相似的,我们就把这些相似的内容抽取出来定义成:模型. 这样,按照模型做出来的东西就是具备某些功能,或者实现了某些需求的,这些模型,就是:设计模式.
设计模式: 一种23种. //记忆
推荐一个人和一本书: 闫闳. UML统一建模语言.
分类:
创建型: 就是需要创建对象的.
单例设计模式, 工厂设计模式.
结构型: 指的是类与类之间的关系.
装饰设计模式, 适配器设计模式.
行为型: 指的是类能做什么.
模板方法设计模式.
装饰设计模式: //记忆
步骤:
1: 获取被装饰类的引用.
2: 将被装饰类的对象作为参数传递给 装饰类的构造方法.
3: 对原有的功能进行升级.
好处:
降低了耦合性,被装饰类的改变与装饰类无关.
转换流:
InputStreamReader: //是字节流通向字符流的桥梁
public InputStreamReader(InputStream is,String charsetName);
OutputStreamWriter://是字符流通向字节流的桥梁
public OutputStreamWriter(OutputStream is,String charsetName);
递归:
概述: 方法自己调用自己.
好处: 不用知道循环次数.
注意事项:
1: 递归必须要有出口,否则容易导致栈内存溢出.
2: 递归的调用次数不能过多,否则容易导致栈内存溢出.
3: 构造方法不能递归调用.
要搞定递归,只需要搞定四个字就OK了: 出口,规律.
补充内容:
1: 将字符串转换成其对应的 不同码表的字节数组.
String str = "你!@好32";
byte[] bys = str.getBytes("utf-8"); //小括号中写的是码表的名字,不区分大小写
//中文的第一个字节都是 负数. 在gkb码表中占两个字节,在utf-8码表中占三个字节.
System.out.println(Arrays.toString(bys));
[-28, -67, -96, 33, 64, -27, -91, -67, 51, 50]
2.拷贝纯文本文件的方式:
1: 用普通的字符流一次读写一个字符.
2: 用普通的字符流一次读写一个指定长度的字符数组.
3: 用高效的字符流一次读写一个字符.
4: 用高效的字符流一次读写一个指定长度的字符数组.
5: 用高效的字符流一次读写 一行数据. //必须重点掌握
递归: 方法自己调用自己
好处:
不用知道次数
注意事项:
1.递归必须有出口,否则容易导致内存溢出
2.递归调用次数
弊端:
次数过多会造成内存溢出
构造方法能用递归吗?
构造方法不能使用递归调用
递归调用是否必须有返回值?
不一定,看需求,
面试题:
1: Writer 类, 字符高效流(BufferedRreader,BufferedWriter), 字节高效流(BufferesInputStream,BufferesOutputStream*)的内置缓冲区的大小分别是多少?
2KB. 16KB(8192个字符) 8KB(8192个字节)
2: 什么时候使用字符流?
只读或者只写 纯文本文件的时候可以考虑使用字符流.
/*
当一个文件能用微软自带的记事本打开,并且里边的内容你也能看得懂的时候,就可以使用字符流拷贝.
//拷贝纯文本文件的时候推荐使用字符流.
*/
3: 字符流是否可以拷贝非纯文本文件?
不可以拷贝.
4: readLine()和newLine()的作用是什么? 是哪个类中的方法?
readLine():BuferedReade里的,读取一行
newLine():BufferesWriter里的,换行
5: 字节流通向字符流的桥梁是?
InputStreamReader.
6: 字符流通向字节流的桥梁是?
OutputStreamWriter
7: 进行递归的方法,必须有返回值吗?
不一定,看需求.
8.nextLine()与\r\n的区别?
newLine():是跨平台的换行,属于bufferedReader
"\r\n":只支持Windows的换行