面试必问的 Java 字节流与字符流
点击上方“业余草”,选择“置顶公众号”
第一时间获取技术干货和业界资讯!
最近,我写的都是一些基础知识。一些人不屑于看,看了标题就私信我“能不能写点高级的,看了这标题我就知道内容了,再这样我就取关了!”
但是也有人表示喜欢看。“内容虽然基础,但是看完后我有了新的认知!”
所以,我的尴尬的取关数据是时候给大家展示一下了。
最近 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.8 Java字节流和字符流的区别,如何区分输入流和输出流?
Java字节流和字符流的区别 首先我们先大概总结一下前面学习的内容,可分为以下几点: 以 Stream 结尾都是字节流,Reader 和 Writer 结尾都是字符流. InputStream 是所有 ...
- java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别
[Java教程]Java字节流与字符流的区别 0 2017-05-22 12:00:42 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身 ...
- Java字节流和字符流,是时候总结一下IO流了
Java字节流和字符流,是时候总结一下IO流了 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 ...
- 面试避坑手册之 Java字节流和字符流总结IO流!
从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部设备如键盘等的输入值,而对于这种数据的接收方式,我们一般有三种方法:字节流读取,字符流读取,Scanner 工具类读取. 字节流读取 直接看 ...
- 复习Java字节流_字符流使用及案例
字节流_字符流 主要内容 IO流 字节流 字符流 异常处理 Properties 第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了ctrl+s ,可能 ...
- Java字节流与字符流的区别和执行效率
区别: 1.字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 2.字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是 ...
- Java字节流和字符流的优缺点_字节流与字符流的区别用字节流好还是用字符流好?...
字节流: (A)FileOutputStream(File name) 创建一个文件输出流,向指定的 File 对象输出数据. (B)FileOutputStream(FileDescriptor) ...
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...
- Java字节流和字符流详解
文章目录 IO概述 什么是IO IO的分类 IO的流向说明图解 顶级父类们 字节流 一切皆为字节 字节输出流[OutputStream] FileOutputStream类 构造方法 写出字节数据 数 ...
最新文章
- C#日期格式精确到毫秒 !!
- 平行进化论再添证据 牙形刺远隔千里却发育模式相同
- 【pmcaff】12月5日凯文·凯利上海演讲实录
- C 语言的实际运用 ---150809124
- filegee为啥没变动也更新_2020/10/07|02=下一步行动|evernote更新以及后续影响
- android百度地图画圆,android百度地图半径画圆
- linux生成大文件
- 把GBK源码文件转UTF8的JAVA代码说明
- 【语音识别】基于matlab GUI BP神经网络0到10数字语音识别【含Matlab源码 672期】
- 2021-10-1825. K 个一组翻转链表
- label confusion learning to enhance text classification models
- KF、EKF、IEKF、UKF卡尔曼滤波器
- PC谷歌浏览器测试手机端安卓、IOS网页
- 学弟:功能测试转测试开发容易吗?
- 浅谈ALM与PLM区别
- 读吴晓波《历代经济变革得失》
- C语言每日一练——第90天:青蛙跳台阶(升级版)
- idea将junit设置模板_IDEA配置JUnit进行单元测试
- 2021度小满9.20编程笔试
- “挑战杯”中国大学生创业计划竞赛创业企划书100篇(二)- 武汉思睿锦程环保建材科技有限公司创业计划书(材料类)...
热门文章
- 正则表达式的条件用法
- 一张图透过结构看世界--掌握结构化思维
- 输入本金、年利率和年数,计算复利;计算球的表面积和体积,判断构成三角形;输入姓名和出生年份,输出姓名和年龄;求ax2+bx+c=0方程的解。(python)
- 【航线运输驾驶员理论考试】人的行为能力
- 2023中国程序员薪酬报告出炉,你拖后腿了吗?
- MATLAB给信号添加白噪声
- java timestamp 使用_Java Timestamp 类的使用(转)
- (建议收藏)第一人称视角带你走进 Vue 源码世界
- JavaScript进阶(二)-- DOM基础
- 管理经济分析02:完全竞争市场与非完全竞争市场