InputStream接口:字节流读取的超类:(常用于操作二进制文件)
其中Read方法,一次性读取一个字节(8 比特),在java中读出的字节用byte(一字节)描述,若文件大小为10000字节,则要循环遍历10000次,这会造成效率上的问题,因此Read方法也可以传入一个byte数组作为缓冲区,缓冲区大小为1024整数倍(物理块为1024整数倍),底层读取数据缓存在byte数组里,这样就极大的减少了循环次数。提高了效率
OutputStream接口:字节流写出的超类:(常用于操作二进制文件)
Reader:字符流读取的超类:(常用于操作文本内容)
子类FileReader 这个流的底层使用的是FileInputStream,read读取一个字符,底层是用FileInputStream读取多个字节查表转换成字符输出,FileReader只能利用默认编码(中文环境为GBK编码)进行解码。,若要使用其他编码解码读取的字节组,则需要使用其父类InputStreamReader(转换类),InputStreamReader构造参数接受一个InputStream和编码字符串(若不传此参数,则视为默认的GBK编码,此种情况下使用子类FileReader更为便捷)。当然使用FileReader也可以指定一个char[]数组作为缓冲区缓存读取的字符,不然每次只能读取一个字符,这样的话效率很低
Writter:字符流写出的超类:(常用于操作文本内容)
编码表问题:
ascii:一个字节中的7位表示0-xxxx.. 正数
iso8859-1:拉丁码表,用了一个字节的8位 1-xxxxx 负数
GB2312:简体中文码表,两个字节表示,两个都是负数
GBK:,英文一个字节,中文两个字节表示,第一个是负数,第二个是正数
unicode:无论什么都是两个字节存储,java语言的char类型(两个字节)就是基于这个编码表,注意字符串是按照默认编码表gbk解析的
utf-8:基于unicode
