字符流和字节流的区别是什么

字符流和字节流的区别在于以下几个方面:1、两者的组成不同;2、两者的处理不同。两者的组成不同是指,字节流是由字节组成的,而字符流是由字符组成的。字符流是采用好似UTF编码,支持中文的。

一、区别

1、两者的组成不同:

字节流的组成:字节流是由字节组成的。
字符流的组成:字符流是由字符组成的。

2、两者的处理不同:

字节流的处理:主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本。
字符流的处理:按虚拟机的encode来处理,也就是要进行字符集的转化。

二、流的概念

在编程中是一种抽象的概念,就好比“水流”,从一段流向另一端

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。

程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

三、什么是字节流,什么是字符流

字节流: 它处理单元为1个字节(byte),操作字节和字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位);

字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到中文(文本)的,用字符流好点(1Unicode = 2字节 = 16位);

所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。

延伸阅读

ASCII 码

每一个二进制位(bit)有01两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000011111111

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。

ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0

Unicode 的问题

需要注意的是,Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了 Unicode 的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示 Unicode。2)Unicode 在很长一段时间内无法推广,直到互联网的出现。

文章标题:字符流和字节流的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/39080

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年2月21日 下午1:01
下一篇 2023年2月21日 下午2:27

相关推荐

  • 开发平台如何服务isv

    开发平台为ISV提供的服务内容包括以下几个方面:一、SDK和API;二、工具和资源;三、技术支持和服务。开发平台提供的SDK和API可以帮助ISV快速接入各种技术和服务,如支付、消息推送、地图、语音识别等。 一、SDK和API 开发平台提供的SDK和API可以帮助ISV快速接入各种技术和服务,如支付…

    2023年3月21日
    1800
  • 怎么形象地理解MFC编程框架

    微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。 一、MFC 的概念 微软基础类库(英语:Mi…

    2023年2月7日
    2800
  • pscc和pscs6有什么区别

    Photoshop CC和Photoshop CS6的区别主要体现在:1、版本更新方式不同;2、功能特性不同;3、许可证方式不同;4、云服务支持不同。总的来说,Photoshop CC是Adobe公司推出的云服务版本,相比于CS6版本,它提供了更多的新功能和更好的云服务支持。 1、版本更新方式不同 …

    2023年5月22日
    500
  • Java中pane和panel有什么区别

    Java中pane和panel的区别是定义不同。就是pane是Java中的一个控件,是不具备包含其他控件的功能的;而panel虽然也是一个控件,但是它还有一个身份就是布局,它可以管理其他的控件。pane 是 JFrame 的一部分,panel要插入pane中。 Pane Pane是一个功能完整独立的…

    2023年2月7日
    8600
  • 为什么很多Java程序员喜欢Angular

    Java程序员喜欢Angular的原因是:1、程序员的思维惯性;2、站在Angular背后的巨人;3、编程语言发展趋势。Java程序员更喜欢Angular的原因是在工作中形成的思维惯性导致的,Angular让Java程序员觉得似曾相识。 1、程序员的思维惯性 相信有条友们已经熟悉了Java技术栈,也…

    2023年1月30日
    3100
  • 有什么好用的redis可视化管理工具

    好用的redis可视化管理工具:1、redis desktop manager;2、RedisPlus;3、Another Redis desktop manager;4、FineBI;5、medis;6、Redis Insight。redis desktop manager对redis可视化管理设…

    2023年1月6日
    11600
  • autocad常用的复制命令有哪些

    autocad常用的复制命令有:1、复制对象一次;2、复制对象多次;3、镜像复制对象;4、旋转复制对象;5、缩放复制对象;6、阵列复制对象;7、偏移复制对象等。复制对象一次是指,在同一图形文件中,若将图形只复制一次,则应选用COPY命令。 1、复制对象一次 在同一图形文件中,若将图形只复制一次,则应…

    2023年1月5日
    63300
  • 项目章程的作用是什么

    项目章程的作用是正式宣布项目的存在,对项目的开始实施赋予合法地位,同时粗略地规定项目的范围,这也是项目范围管理后续工作的重要依据。最后项目章程正式任命项目经理,授权其使用组织的资源开展项目活动。 项目章程多数由项目出资人或项目发起人制定和发布的,它给出了关于批准项目和指导项目工作的主要要求,所以它是…

    2023年1月17日
    33200
  • 如何构建高效的研发管理体系

    构建高效的研发管理体系需要三个关键步骤:1、研发协作流程化;2、研发规范制度化;3、研发技术标准化。研发管理的本质是从流程化,标准化,制度化等维度建立“管理机制”。 1、研发协作流程化 研发管理流程中通常会涉及项目管理和人事管理,而流程化构建的目的是提升研发效率的效能,降低协作成本,这个也是判别一件…

    2022年11月14日
    10100
  • 知识平台有哪些

    知识平台有:1、中国知网;2、知乎;3、喜马拉雅;4、网易云课堂;5、蜻蜓FM;6、得到;7、慕课网;8、腾讯课堂;9、果壳网;10、樊登读书。中国知网是指,CNKI工程,是以实现全社会知识资源传播共享与增值利用为目标的信息化建设项目。 1、中国知网 中国知网,始建于1999年6月,是中国核工业集团…

    2023年2月3日
    17400

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部