年假结束了,看着笔记小结一下字节流和字符流。
1.InputStream和OutputStream都是抽象类,分别表示字节输入流和输出流的所有类的超类。
2.Reader、Writer都是抽象类,用于字符流的操作。
InputStreamReader的子类:FileReader
2.1 BufferedReader:
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
代码语言:javascript复制 BufferedReader in = new BufferedReader(new FileReader("foo.in"));
2.2 InputStreamReader: InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
代码语言:javascript复制 BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
2.3 FileReader: 用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。 FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。
字节流和字符流区别
(1)字节流没有使用缓冲区,而字符流使用了;
(2)处理各种数据都可以通过字节流完成,而在处理中文的时候使用字符流更好