文本IO 二进制IO

时间:2021-02-09 21:00:26

一、文本IO  字符流

  1. 使用PrintWriter写入文件后,必须调用close(),否则数据不能正确保存在文件中。
  2. Scanner的next()读取一个由分隔符分隔的字符串,nextLine()读取以换行符结束的行。
  3. 标记读取不会读取分隔符,所以nextLine()会把所有标记也算作一个标记进行读取。
  4. Scanner的useDelimiter(String s)可以改变分隔符,默认是空格。
  5. 从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重定向,如重定向到文件。