您的位置:首页 > 编程语言 > Java开发

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

2016-11-23 17:14 246 查看
知识点:

字符流:是直接读取字符的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种. //记忆[/b]

推荐一个人和一本书: 闫闳. 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的换行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: