在开始之前,让我们高喊我们的口号:
键盘敲烂,年薪百万!
我听说关注我的人未来都会暴富哦!
目录
缓冲区长度为8192那么,如果文件长度超过8192会怎么样?
那么flush和close有什么区别呢?flush通道没打断,close则是通道被打断了的。
字符集详解
ASCII
计算机当中数据是以0和1存储数据的,一个0或者一个1就是一个bit(比特位),8个比特为一个字节(byte),这样就可以存储2的8次方,一共258个字符。 字节就是计算机当中最小的存储单元。
计算机存一个字母只需要一个字节就可以了。
GBK(国g标b扩k展)
就是GB2312(1980年发布的简体中文汉字编码标准)->为了容纳台湾等地的繁体所以2000年发布GBK包括了中日韩的大部分汉字。
windows系统默认使用的就是GBK。但是显示是ANSI。不同地区的windows电脑使用的中文编码都不太相同,所以把这些字符集起了个公共名字:ANSI
GBK存英文:
GBK存中文
一个汉字占两个字节的空间,因为汉字远大于2的八次方256个。两个字节就是2的十六次方六万五千多个汉字。而三个字节就浪费了。两个字节第一个字节是高位字节,后一个是低位字节。高位字节一定是以1开头的。为什么以1开头呢?这样可以和英文字母区分开来,兼容了英文字母(以0开头)而不会混淆。
完整过程:
Unicode
又称万国码(包含这个世界上大多数国家的语言)。
utf-8是Unicode字符集的一种编码方式。
存英文:
在utf-8编码格式中,英文用一个字节存,用ASCII码编码,前面加0后面是正常的二进制。中文是三个字节第一个字节开头是1110,第二个字节开头是10,第三个字节开头是10。
存中文:
最后总结重要的:
为什么会有乱码?
读取数据的时候没有读取完整个汉字。
例如一个汉字用Unicode的utf-8方法存的,而用字节流一个字节一个字节的读取的话,会把一个汉字三分之一读出来,那么这样就会找不到而显示?或者空方框
编码和解码的时候方式不统一
正常:
乱码:
怎么不产生乱码?
- 不要用字节流读取文本文件
- 编码和解码时使用同一个码表,同一个编码方式
为什么拷贝的时候不会乱码?
因为拷贝是把文件的字节一个一个拷贝到另一个文件当中,如果用符合拷贝过来的编码方式进行解码打开就不会乱码。