java基础笔记之IO流之字符流

时间:2023-02-24 19:02:58
知识点: 字符流:是直接读取字符的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的换行