A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© code23k 初级黑马   /  2019-4-4 09:22  /  872 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先做一个简单整理:
       字节流和字符流:这里主要是针对文件操作的IO流来写的,只适合少量、小文件的读写。不适合大量、很多文件的读写,速度会非常慢。
       字节流:FileInputStream(读), FileOutputStream(写)
       字符流:FileReader(读), FileWriter(写)
缓冲流:为解决大量、多文件读取而存在,嵌套在字节流、字符流的外面,大大增强读写速度。
              字节缓冲流:BufferedInputStream(读), BufferedOutputStream(写)
              字符缓冲流:BufferedReader(读),   BufferedWriter(写)
              格式:字节缓冲流(字节流),  字符缓冲流(字符流)如下
BufferedInputStreambis = new BufferedInputStream(new FileInputStream(File f))
BufferedReaderbr = new BufferedReader(new FileReader(File f))
      
       转换流:解决编码不同引出的读写问题,嵌套在字节流的外面,可指定编码方式进行读写(注:读写的编码方式要相同)
              InputStreamReader:字节流通向字符流的桥梁,作用是读取字节,转换成字符
              OutputStreamWriter:字符流通向字节流的桥梁,作用是将字符转换成字节写入
              格式:跟上面的类似,就不敲了
       那么重点来了,缓冲流能和转换流进行嵌套,再套上字符或字节流吗?
       如果要对大量编码方式进行转换的文件进行读写,那是不是应该套上缓冲流来增强读写速度啦?
       经试验,的确可行,格式如下:
       字符缓冲流(转换流(字节流(文件)))
                              
图示为GBK格式文件的读写,
这里需要注意一点,因为转换流只有两种InputStreamReader和OutputStreamWriter,
InputStreamReader读取字节,转换成字符,所以它能操作的只能是字节流InputStream,而操作它的只能是BufferedReader,不能用BufferedInputStream
OutputStreamWriter将字符转换成字节写入,所以操作它的只能是BufferedWriter,它操作的只能是字节流OutputStream,不能用BufferedOutputStream
还有个序列化(ObjectOutputStream)和反序列化流(ObjectInputStream),不过仔细想想,他俩操作的都是字节流,那么字符缓冲流就不适合这哥俩了,笔者好奇试了试字节缓冲流,居然是OK的,这里也贴出个格式图片:
字节缓冲流(序列化流(字节流(文件)))
那么问题又来了,能不能有这种格式啦:
       字符缓冲流(转换流(序列化流(字节流(文件))))?
我又经不住诱惑,丧心病狂的测试了,果然有
BufferedReader brr = new BufferedReader(new InputStreamReader(new ObjectInputStream(new FileInputStream(file)),"GBK"));
从此以后,妈妈再也不用担心我傻傻分不清各种IO流了

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马