一、文本IO 字符流
- 使用PrintWriter写入文件后,必须调用close(),否则数据不能正确保存在文件中。
- Scanner的next()读取一个由分隔符分隔的字符串,nextLine()读取以换行符结束的行。
- 标记读取不会读取分隔符,所以nextLine()会把所有标记也算作一个标记进行读取。
- Scanner的useDelimiter(String s)可以改变分隔符,默认是空格。
- 从URL读取数据,创建URL对象,调用url.openStream(),就可以用Scanner读取url.openStream()中的数据了。
二、二进制IO 字节流
1. 文本文件是由字符序列构成的,二进制文件有bit序列构成,不涉及编码、解码,效率高。在计算机中,本质上,所有的文件都是二进制文件。文本IO建立在二进制IO上,提供了一层抽象,用于字符层次编码,解码。
2.1)FileInputStream、FileOutputStream为基本输入输出,只能用来读取字节,即最基本的读取二进制数据。
2)DataInputStream、DataOutputStream读取写入字节,将他们转换为合适的基本类型或字符串。
3)java中字符用统一码表示,一个统一码由2个字节构成。
4)ObjectInputStream、ObjectOutputStream读取写入对象,包含了DataInputStream、DataOutputStream的所有功能。对象需要实现Serializable接口才可以被写入,即可序列化的,对象中存在不能被序列化的对象时,不可以被序列化,需要在不能被序列化的对象成员前加transient关键字,静态变量不会被序列化。
3.RandomAccessFile,随机访问文件。
三、参考 http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html
四、构建一个输入输出流时,最内层是输入输出的源,即首先根据源构造第一步流,源包括文件,内存,控制台等。第二步根据需要选用装饰器,如是否带缓存,是否转换成标准类型等,即 添加有用的接口和属性,改变流的行为。
五、标准IO
System.out System.err 这两个是被包装成了printStream对象。
System.in是一个未经加工的InutStream,所以在使用它时需要进行包装。
通过System.setIn(InputStream),setOut(PrintStream),setErr(PrintStream)可对标准IO重定向,如重定向到文件。