字节与字符,字节流与字符流

时间:2021-07-08 16:16:51
字节(byte)
一个字节是8位(bit),一个位代表0/1。即二进制
1KB=1024byte
1MB=1024*1024byte

ASCII码  字母占1字节,汉字占2字节,一个二进制数字是0-255

(数字: 48-57小写字母: 97-122大写字母: 65-90)

UTF-8编码  1个英文字符等于1字节,中文等于3字节(常用的汉字占3个,超大字符汉字占4个)

unicode    一个英文2个字节,中文也是2个字节

(Unicode 是一种字符编码,为了解决传统的字符编码方案的局限,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求)


标点符号   英文标点占1字节,中文标点占2个字节  

字符是字母数字符号等的统称,没有特殊的意义



字符流与字节流

都是java流,程序需要数据时需要输入流,要保存数据的时候,用输出流。

java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)

   InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,
  Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串.


字符处理单元为2个字节的unicode字符,分别操作字符,字符数组或字符串,字节流处理单元为1个字节,操作字节和字节数组,所以字符流是java虚拟机讲字节转化为2个字节的unicode字符为单位的字符而成,对语言国际化支持较好,所以涉及到中文(文本)的,用字符流好一点,其他的音频,图片,歌曲,可以用字节流。


 1、字节流可以用于任何对象,包括二进制对象,而字符流只能处理字符或者字符串
 2、字节流提供了处理任何类型的IO操作的功能,但不能直接处理Unicode字符,而字符流可以
 
 Javaqq中操作流程
 1、使用File打开文件
 2、通过字节流或者字符流的子类,制定输出的位置
 3、进行读写操作
 4、关闭输入输出
 
 字节流主要操作布特数据类型,以byte数据组为准,主要操作类是抽象类OutputStreeam,InputStream
 字符流 两个字符流的类是Reader、Writer
 


因为存在编码问题,所以有的字符流,本质是,读取了字节流,再去读取对应的编码表,返回查到的字符字节流可以处理所有类型的数据,图片。MP3。avi等,字符流只能处理纯字符数据,如纯文本数据,优先考虑字符流,其他的用字节流
 
 字节流在操作时候本实施不会用到缓冲区(内存)的,而是与文件本身直接操作,而字符流操作时用到缓冲区
 字节流在操作文件时,及时不关闭资源(close方法),文件也能输出,字符流不适用close方法,则不会输出文件内容,说明字符流用的是缓存区,flush方法可以强制刷新缓存区,这样才能不close方法的情况下输出内容