6,学了文件IO字节流之后,我们会发现原始的字节流对象用起来没那么高效,因为每个读或写请求都由底层操作系统处理,这些请求往往会触发磁盘访问、网络活动或其他一些相对昂贵的操作 。不带缓冲区的流对象,只能一个字节一个字节的读,每次都调用底层的操作系统API,非常低效,而带缓冲区的流对象,可以一次读一个缓冲区,缓冲区空了才去调用一次底层API,这就能大大提高效率 。所以又有了和,他们的用法是把字节流对象传入后再使用,也相当于把它俩套在了字节流的外面,给字节流装了个“外挂”,让基本字节流如虎添翼 。7,说到操作文件,就不得不提到文件的分类和编码格式 。文件分为二进制文件和文本文件,二进制文件是用记事本打开后看不懂的,他们的编码格式是特殊的,比如pdf文件,exe文件 。记事本打开后人能看懂的只有纯文本文件,我们处理文件(或者说处理任何的字节流),就免不了处理一些文本文件(或文本字节流) 。如果是英语国家的人还好说,因为他们是用的常用字符用一张ASCII码表就能表示得出来,用一个字节就能表示一个字母 。但是显然,对非英语国家的人来说,一个字节的大小无法表示他们所有的文字 。
因此,人们需要有能够处理字符的类,或者说这个类提供一个功能:就是把输入的字节转成字符,把要输出的字符转成计算机可以识别的字节 。所以,你需要两个转换流:和 。这两个类的作用分别是把字节流转成字符流,把字符流转成字节流 。但是这两个流需要套在现成的字节流上才能使用,当中用到的设计模式也就是常说的装饰模式 。当字节流被转成字符流之后,恭喜你,你可以不必操作字节流了,而是可以用人类的方式read和write各种“文字” 。(那么,我们为什么还要学习字节流?因为字节流依然有它的作用范围 。首先,所有的流都是建立在字节流之上的,比如字符流 。字节流或许可以读任何字节,但是他处理不了(万国码),他处理不了Data流,流,也就是说,它做不了高级的事情,只能读写最原始的东西 。字节流好比动物,能看,能听,能汪汪叫,但是他不能读书,不能写字,不能理解更高级的知识 。其次要注意的是,字符流只能用来处理文本文件,也就是只能来处理字符,如果出来用来处理二进制文件,会带来错误,所以处理二进制文件只能用字节流)8,还是回到文件系统,我们最常见的是和文件系统打交道,那么针对如此常见的用途,读取文本文件能不能用一种方便的方式呢?当然,大牛们替你想到并提供了 。
和这两个流对象可以直接把文件转成读取、写入流 。让你省去了创建字节流,再套上转换流的步骤 。看看这类名起的,实际上很形象,和,明摆着告诉你“阅读和书写”都是“人可以做的”也就是他们表示的是字符流 。同理上面的和,表示的是把字节流转成人可读的,把字节流转成人可写的 。因此他们的顶层抽象类:和,表示的是所有人类可读可写的字符流统称 。10,同上面说的缓冲区的作用,再把和做成高效的,就需要和,把它们套在和上,就能实现高效的字符流 。11,讲到这里,IO流的大概思想已经说的的差不多了,是不是觉得之前混乱的那些类,现在知道他们的作用和设计思想以后,稍稍清晰了许多呢?可以简单的记,字节流是基础,理论上可用于所有的输入输出场景,内容是文字的字节流可以通过转换流转成字符流,转换流是字节流和字符流之间相互转换的桥梁,把字节流转成字符流,离不开转换流,字符流是对于字符功能的增强可用来处理“文字”,操作文件系统应用范围最广,所以JDK提供了现成的类,用来方便编程使用 。
- 知乎python储存_知乎高赞回答:有什么相见恨晚的Python技巧
- 最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(继上篇scrapy分析知乎
- ascll码 — c语言转换
- java知乎爬虫
- 傲剑狂刀人物怎么转换
- 微信怎么转发别人的朋友圈内容
- 微信里的钱转到支付宝怎么转
- 手机图片怎么转Word?转换的原理是什么?
- 附案例数据和代码 不到70行Python代码,轻松玩转RFM用户分析模型
- 线控转向系统Carsim和Simulink联合仿真模型,带Carsim数据库