「Java」「JAVA」字节流、字符流、缓冲流、转换流、内存流、字符编码( 五 )
面向字符的数组流/内存流 , CharArrayReader和CharArrayWriter , 该“流”会把数据暂存到内存中 , 以便实时读写 , 读写时使用的字符类型(char[
);
代码案例如下:
? 面向字符的数组流/内存流 案例
面向字符串的内存流 , StringReader/StringWriter , 把数据临时存储到字符串中 , 也同样是在内存中 , 但数据的类型是字符串;
案例代码如下:
面向字符串的内存流 案例
合并流合并流 , SequenceInputStream:能够将2个或者以上的InputStream合并成一个单一的InputStream , 进而进行合并操作;
合并流 案例
字符编码字符编码的发展历程:
阶段1:计算机只认识数字0和1 , 计算机里的一切数据都是以数字来表示;因为英文符号有限 , 所以规定使用的字节的最高位是0 , 每一个字节都是以0~127之间的数字来表示 , 比如:A对应65 , a对应97..这就是美国标准信息交换码-ASCII;
阶段2:随着计算机在全球的普及 , 很多国家和地区都把自己的字符引入了计算机中 , 比如汉字;但是ASCII中的一个字节能表示数字范围太小 , 不能包含所有的中文汉字 , 所以就规定使用两个字节来表示一个汉字;
所以决定 , 原有的ASCII字符的编码保持不变 , 仍然使用一个字节表示;为了区别一个中文字符与两个ASCII码字符:
- 中文字符的每个字节最高位规定为1(中文的二进制是负数) , 这个规范就是GB2312编码;
- 后来在GB2312的基础上增加了更多的中文字符 , 比如简体中文 , GBK应运而生;
为了解决各个国家因为本地化字符编码带来的影响 , 把全世界所有的符号统一进行编码-Unicode编码;此时某一个字符在全世界任何地方都是固定的 , 比如字符:'哥' , 在任何地方都是以十六进制的54E5来表示 。 Unicode的每个编码字符都占有2个字节大小 。
常见的字符集:
- ASCII:每个字符占一个字节 , 只能包含128个符号 , 不能表示汉字;
- ISO-8859-1:每个字符占一个字节 , 收录西欧语言 , 不能表示汉字;
- ANSI:每个字符占两个字节 , 在简体中文的操作系统中 , ANSI 就指的是 GB2312;
- GB2312/GBK/GB18030:每个字符占两个字节 , 中文专用编码;
- UTF-8:是一种针对Unicode的可变长度字符编码 , 又称万国码 , 是Unicode的实现方式之一 , 目前的应用率最高;
- UTF-8 BOM:是微软搞出来的编码 , 默认占3个字节 , 使用率并不高;
互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码 。
存储字母 , 数字和汉字
存储字母和数字时无论是什么字符集都只占1个字节(因为和ASCII兼容) , 但是存储汉字:GBK家族占两个字节 , UTF-8家族占3个字节 。
存储中文时 , GBK和UTF-8都是OK的 。
字符编码 案例
小结
- InputStream 和 OutputStream
- Reader 和 Writer
- 文件过滤器
- 字节流
- 字符流
- 缓冲区
- 资源关闭
- 『Java』java数据结构系列——什么是数据结构
- 『Java』马云:成功人跟普通人差不多,但这三点我一定要分享给所有年轻人
- #Java#java线程到底有多少种状态?
- #智能手表#1、初识java-1
- [华为]有朋友问我“JAVA全栈”、“互联网架构师”和“JAVAEE”到底是什么?
- 「javascript」这边走Javascript了解一下
- 「华为」一篇有趣的Java class
- struts@Java面试之项目面试问题——不看面试会后悔的
- 「Java」六面蚂蚁金服,唬住了面试官要了30K;其实Java面试也没那么难
- Java@23种java设计模式之:建造者模式、工厂方法模式、抽象工厂模式!