StringBufferInputStream
1)StringBufferInputStream是jdk1.0的类,他对某些编码的字符不能很好的转化为字节,所以在1.0之后就淘汰了。
2)淘汰的类,尽量少用,如果需要时尽量采用同等类型的类替换。
3)字节流,从类名可以看出其父类是InputStream,也就是说他是字节流的一种装饰。
StringReader
1)弥补StringBufferInputStream的不足而产生的,他是JDK中StringBufferInputStream的替代品。
2)字符流,父类为Reader,相对于BufferedReader有所不同,原因是StringReader注重的是字符,而BufferedReader注重的是缓存。
BufferedReader
1)缓存流,项目中使用最多的,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
2)Reader的子类,同样是个字符流的装饰品。
总结:
项目中极少使用字符流读取文件数据,也很少把一个字符串放在字符流当中,前者不用是因为我们不知道文件的字符编码格式,所以如果采用字符流去读取一个不知道编码格式的文件,那么随时可能乱码;而后者不使用的话是因为直接对字符串操作更加简单。
那么如何处理文件的编码呢?
1)通过明确的编码格式
InputStreamReader isr = new InputStreamReader(new FileInputStream(file),charset);
2)通过字节流
InputStream 获取字节之后,然后通过String的构造方法进行字节转码,转为指定格式的字符串,记住字节是不会有乱码的!