点击上方“业余草”,选择“置顶公众号”

第一时间获取技术干货和业界资讯!

最近,我写的都是一些基础知识。一些人不屑于看,看了标题就私信我“能不能写点高级的,看了这标题我就知道内容了,再这样我就取关了!”

但是也有人表示喜欢看。“内容虽然基础,但是看完后我有了新的认知!”

所以,我的尴尬的取关数据是时候给大家展示一下了。

最近 30 天的趋势图如下所示。

我要感谢一部分网友通过转发、评论等形式对我的支持!谢谢你们!


好了,下面我们开始今天的内容。

字节流和字符流其实很好理解!

字节流就是 Byte 流,字节就是 Byte。

字符流就是 Character 流,字符就是 Character。

这里面有两个单位换算大家需要记住一下。

  • 1 byte = 8 bit

  • 1 char = 2 byte = 16 bit

虽然 1 bit 才是数据真正的最小单位,但 1 bit 的信息量太少了。要表示一个有用的信息,需要好几个 bit 一起表示。所以大多数情况下,字节是数据最小的基本单位。

比如,我们熟知的基本型的大小都是 8 bit(也就是1字节)的整数倍:

  • boolean: 1 byte

  • short: 2 byte

  • int: 4 byte

  • float: 4 byte

  • long: 8 byte

  • double: 8 byte

到这里,我们认识的都是字节。但是,Java I/O 的编码系统提供的 Java IO 库有两个支系,面向字节流的 InputStream 和 OutputStream;面向字符的 Reader 和 Writer。

为什么要有字符流呢?那是因为英文,我们可以用字节来表示,但是中文、日文、韩文等没法用字节来表示了,所有人们就想到了新的字符编码集。比如,Unicode 字符集,GB 18030,GBK,Big5,ISO-8859-1 等。

所以,最终就是一个字符用 1 个、2 个或 4 个字节组成。总而言之,一切都是字节流,其实没有字符流这个东西。字符只是根据编码集对字节流翻译之后的产物。

所以,字节流的 InputStream 和 OutputStream 才是一切的基础。实际总线中流动的只有字节流。需要对字节流做特殊解码才能得到字符流。Java 中负责从字节流向字符流解码的桥梁是InputStreamReader 和 InputStreamWriter。

看下面的 InputStreamReader 和 OutputStreamWriter 的结构图。

实际负责编码和解码的是 StreamDecoder 类和 StreamEncoder 类。编码过程中必须指定使用的字符编码集 Charset。所以 InputStreamReader 和 OutputStreamWriter 的构造器都带有 Charset 类型的参数。

如果没有指定编码集,将使用系统默认编码集。而我们经常使用的 FileInputReader 和 FileOutputWriter 就是 InputStreamReader 和 OutputStreamWriter 的派生类。

到现在,你是不是想起了那句话。“世界上本来没有路,走的人多了,也就变成了路。”

计算机中本没有字符流,一开始只适用于英文,但是互联网属于全人类的,所以人们又搞出了字符流。字符只是包装的字节而已。

原文链接:浅谈 Java 中的字节流与字符流

10T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,GO等等。在公众号内回复对应关键字或框架名字,即可免费获取!!

你再主动一点点   我们就有故事了

面试必问的 Java 字节流与字符流相关推荐

  1. 1.8 Java字节流和字符流的区别,如何区分输入流和输出流?

    Java字节流和字符流的区别 首先我们先大概总结一下前面学习的内容,可分为以下几点: 以 Stream 结尾都是字节流,Reader 和 Writer 结尾都是字符流. InputStream 是所有 ...

  2. java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别

    [Java教程]Java字节流与字符流的区别 0 2017-05-22 12:00:42 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身 ...

  3. Java字节流和字符流,是时候总结一下IO流了

    Java字节流和字符流,是时候总结一下IO流了 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 ...

  4. 面试避坑手册之 Java字节流和字符流总结IO流!

    从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部设备如键盘等的输入值,而对于这种数据的接收方式,我们一般有三种方法:字节流读取,字符流读取,Scanner 工具类读取. 字节流读取 直接看 ...

  5. 复习Java字节流_字符流使用及案例

    字节流_字符流 主要内容 IO流 字节流 字符流 异常处理 Properties 第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了ctrl+s ,可能 ...

  6. Java字节流与字符流的区别和执行效率

    区别: 1.字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 2.字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是 ...

  7. Java字节流和字符流的优缺点_字节流与字符流的区别用字节流好还是用字符流好?...

    字节流: (A)FileOutputStream(File name) 创建一个文件输出流,向指定的 File 对象输出数据. (B)FileOutputStream(FileDescriptor) ...

  8. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  9. Java字节流和字符流详解

    文章目录 IO概述 什么是IO IO的分类 IO的流向说明图解 顶级父类们 字节流 一切皆为字节 字节输出流[OutputStream] FileOutputStream类 构造方法 写出字节数据 数 ...

最新文章

  1. C#日期格式精确到毫秒 !!
  2. 平行进化论再添证据 牙形刺远隔千里却发育模式相同
  3. 【pmcaff】12月5日凯文·凯利上海演讲实录
  4. C 语言的实际运用 ---150809124
  5. filegee为啥没变动也更新_2020/10/07|02=下一步行动|evernote更新以及后续影响
  6. android百度地图画圆,android百度地图半径画圆
  7. linux生成大文件
  8. 把GBK源码文件转UTF8的JAVA代码说明
  9. 【语音识别】基于matlab GUI BP神经网络0到10数字语音识别【含Matlab源码 672期】
  10. 2021-10-1825. K 个一组翻转链表
  11. label confusion learning to enhance text classification models
  12. KF、EKF、IEKF、UKF卡尔曼滤波器
  13. PC谷歌浏览器测试手机端安卓、IOS网页
  14. 学弟:功能测试转测试开发容易吗?
  15. 浅谈ALM与PLM区别
  16. 读吴晓波《历代经济变革得失》
  17. C语言每日一练——第90天:青蛙跳台阶(升级版)
  18. idea将junit设置模板_IDEA配置JUnit进行单元测试
  19. 2021度小满9.20编程笔试
  20. “挑战杯”中国大学生创业计划竞赛创业企划书100篇(二)- 武汉思睿锦程环保建材科技有限公司创业计划书(材料类)...

热门文章

  1. 正则表达式的条件用法
  2. 一张图透过结构看世界--掌握结构化思维
  3. 输入本金、年利率和年数,计算复利;计算球的表面积和体积,判断构成三角形;输入姓名和出生年份,输出姓名和年龄;求ax2+bx+c=0方程的解。(python)
  4. 【航线运输驾驶员理论考试】人的行为能力
  5. 2023中国程序员薪酬报告出炉,你拖后腿了吗?
  6. MATLAB给信号添加白噪声
  7. java timestamp 使用_Java Timestamp 类的使用(转)
  8. (建议收藏)第一人称视角带你走进 Vue 源码世界
  9. JavaScript进阶(二)-- DOM基础
  10. 管理经济分析02:完全竞争市场与非完全竞争市场