再谈java io

    xiaoxiao2021-03-25  98

    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

    转载请注明原文地址: https://ju.6miu.com/read-20305.html

    最新回复(0)