Java 中,读取文件时,往往会涉及到 InputStream & InputStreamReader &BufferedReader.
自己画了个类图,方便理解
1. 类图
2. 例子
例如在读取字节流的时候:
private String readFromStream(InputStream inputStream) throws IOException {
StringBuilder output = new StringBuilder();
if (inputStream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
BufferedReader reader = new BufferedReader(inputStreamReader);
String line = reader.readLine();
while (line != null) {
output.append(line);
line = reader.readLine();
}
}
return output.toString();
}
读写字节流大体涉及到 Steams(s表示有多种), Readers/Writers, BufferedReader/BufferedWriter。 其中的作用如下:
Streams: 处理字节级别的数据
Reader/Writer : 处理字符级别的数据。 支持多种字符编码
BufferedReader/BufferedWriter: 优化性能。 需要读取的数据,会缓存到内存中,以便快速访问。(包装了Reader/Writer)
3. 流程
InputStream 获取字节流数据, Reader 将字节流数据转换成 字符数据,由BufferedReader 写入字符数据到内存中, 最后JAVA 程序从内存中读取。
Streams/Reader/BufferedReader 中都有read()操作, 但是前面两个需要Java程序从硬盘中读取,效率很低; 后者从内存中读取,效率高
参考:
Java 官方介绍(推荐):
http://www.javalearningacademy.com/streams-in-java-concepts-and-usage/