关系图
1.字符流
1.1 Reader
Java Reader是用于读取字符流的抽象类。子类必须实现的唯一方法是read(char[],int,int)和close()。
但是,大多数子类将覆盖某些方法以提供更高的效率和功能。
1.1.1 BufferedReader
已知直接子类:
LineNumberReader
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
可以指定缓冲区大小,或者可以使用默认大小。默认值足够大,可用于大多数用途。
通常,由读取器做出的每个读取请求将引起对底层字符或字节流的相应读取请求。因此,建议将BufferedReader包装在其read()操作可能昂贵的读取器上.例如FileReaders和InputStreamReaders。
例如:
BufferedReader in =new BufferedReader(new FileReader("foo .in"));
将缓冲指定文件的输入。没有缓冲,每次调用read()或readLine()可能导致从文件中读取字节,转换成字符,然后返回,这可能非常低效。
使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream进行本地化。
1.1.2 InputStreamReader
已知直接子类:
FileReader
InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
每个调用InputStreamReader的read()方法之一可能会导致从底层字节输入流读取一个或多个字节。为了使字节有效地转换为字符,可以从底层流读取比满足当前读取操作所需的更多字节。
为了最大的效率,请考虑在BufferedReader中包装一个InputStreamReader。
例如:
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
1.1.2.1 FileReader
FileReader是用于读取字符流
1.1.3 StringReader
一个字符流,其源是一个字符串。
1.1.4 PipedReader
1.1.5 ByteArrayReader
1.1.6 FilterReader
用于读取过滤后的字符流的抽象类。抽象类FilterReader本身提供了将所有请求传递给包含的流的默认方法。FilterReader的FilterReader应该覆盖这些方法中的一些,并且还可以提供其他方法和字段。
1.1.6.1 PushbackReader
一个字符流读取器,允许将字符推回到流中。
1.2 writer
用于写入字符流的抽象类。子类必须实现的唯一方法是write(char[],int,int),flush()和close()。然而,大多数子类将覆盖这里定义的一些方法,以便提供更高的效率,附加的功能或两者。
1.2.1 BufferedWriter
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高校写入。
可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途。
提供了一个newLine()方法,它使用平台自己的系统属性line.separator定义的行分隔符概念。并非所有平台都使用换行符('\n')来终止行。因此,调用此方法来终止每个输出行,因此优选直接写入换行符。
一般来说,Writer将其输出立即发送到底层字符或字节流。除非需要提示输出,否则监利将BufferedWriter包装在其write()操作可能很昂贵的Writer上,例如FileWriters和OutputStreamWriters。
例如:
PrintWriter out=new PrintWriter()