网站建设及政务工作自查,加速器国外,js 修改 wordpress,wordpress首页显示vip标志IputSrem类和OupuSrem类在读写文件时操作的都是字节#xff0c;如果希望在程序中操作字符#xff0c;使用这两个类就不太方便#xff0c;为此JDK提供了字符流。同字节流样#xff0c;字符流也有两个抽象的顶级父类#xff0c;分别是Reader和Writer其中#xff0c;Reader是…IputSrem类和OupuSrem类在读写文件时操作的都是字节如果希望在程序中操作字符使用这两个类就不太方便为此JDK提供了字符流。同字节流样字符流也有两个抽象的顶级父类分别是Reader和Writer其中Reader是字符入流用于从某个源设备读取字符;Writer是字符输出流用于向某个目标设备写入字符。Reader和Writer作为字符流的顶级父类也有许多子类。下面通过张继承关系图列举Reader和Writer的一些常用子类 从中可以看到字符流的继承关系与字节流的继承关系有些类似很多子类都是成对(输入流和输出流)出现的其中PipedReader和FileWriter用于读写BufferedReader和BufferedWriter是具有缓冲功能的流使用它们可以提高读写效率。
如何深入理解字符流的编码
Java中是以流的形式来实现数据在网络中的传输而所说的“流”则是字节流。因为所有的数据的最底层都是以字节为单位存储的所以以字节为单位传输数据无疑是最简单也是最有效的传输方式。 我们在学习Java的过程中也经常接触字符流字符流顾名思义则是以字符为单位进行数据传输但是其实字符流的应用面是很窄的并不是所有的文件都存在字符的概念的比如视频文件、音频文件、图片文件这些是无法以字符为单位进行传输的。字符流只能对文本字符进行操作。 提到字符我们首先就会想到的是编码因为计算机存储的是字节我们看到的却是字符这之间是靠编码表对应起来的那么这也就是本篇文章索要研究的内容—字符流编码。 首先我们来看下面的案例 案例显示Demo.java的项目编码和b.txt的编码格式一样则能够正常写入不会乱码。原理如下图所示 字符流每一个字符流都存在一个缓冲区缓冲区的编码格式是和项目的编码格式一致的上述代码执行流程是字符串“黑马”在FileWriter的缓冲区里面通过GBK编码把汉字编码成对应的字节然后底层通过字节流将字节写入到b.txt。 很多人我们打开b.txt时看到的是“黑马”这两个字啊并不是什么码值啊。其实所有文件的底层都是字节子不过我们打开b.txt时记事本软件就通过此文件的编码—GBK帮我们把码值解码成“黑马”这两个字了所以我们看到的是黑马。照这样看来如果b.txt的文件编码是UTF-8的话肯定就会乱码因为记事本会按照UTF-8进行解码效果如下 接下来难点才真正的来临很多人看了下面的代码和运行效果就蒙圈我们把上图的代码改下其他编码格式不变你会发现不乱码了如下图 源码如下 很多人蒙圈的原因是因为先把字符转为了UTF-8 但是又通过new String(bytes)转成了GBK啊但是b.txt是UTF-8格式的编码啊。为什么没有乱码呢 下图解释的很详细 执行流程是先通过UTF-8编码把“黑马”编码成几个字节比如13 42 35 86 59 47然后再通过GBK编码把该码值解码成对应的字符比如“传智人”然后“传智人”进入缓冲区会通过GBK编码编码成刚才的字节 也就是13 42 35 86 59 47然后再通过字节流写入到b.txt中当打开b.txt时记事本软件会按照此文件编码格式-UTF-8解码成“黑马”所以我们看到的是没有乱码。
总结通过比价复杂的案例我们明白了一、每个字符流都存在缓冲区而且缓冲区的编码是和项目编码一致。二、字符流的底层依然是使用的字节流而且还存在缓冲区的编码动作所以效率比字节流会慢很多所以通常数据的传输我们都会使用字节流。三、文本文件的底层存储的也是字节我们打开文件看到的字符是记事本软件所做的解码。
Java基础入门
java零基础自学首Java入门教程含Java项目和Java真题
Javaweb核心基础
JavaWeb基础教程Java web从入门到企业实战完整版
Spring Cloud最全微服务架构
史上最全面的springcloud微服务技术栈
SSM框架教程
SSM框架教程_SpringSpringMVCMaven高级Spring