黑马程序员技术交流社区
标题: 缓冲流_转换流_字节流套用与辨析 [打印本页]
作者: code23k 时间: 2019-4-4 09:22
标题: 缓冲流_转换流_字节流套用与辨析
先做一个简单整理:
字节流和字符流:这里主要是针对文件操作的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流了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |