java字节流和字符流
字节是指一小组相邻的二进制数码。通常是8位作为一个字节。java中用byte表示一个字节,(1B = 8bit)
字符是人们使用的记号,抽象意义上的一个符号。如‘A’,‘1’,‘#’ 等。java中用char表示一个字符
参考博客:https://blog.csdn.net/qq_29232943/article/details/62235608
一个字符用几个字节表示与编码方式有关。
UTF-8是在互联网上使用最广的一种Unicode的实现方式。
UTF-8编码中汉字占几个字节的问题:
占2个字节的:〇
(〇有两个读音 xīng líng(一) xīng 同“星”。唐武则天所造字,(二) líng 同“零”。)
占3个字节的:基本等同于GBK,含21000多个汉字
占4个字节的:中日韩超大字符集里面的汉字,有5万多个
一个utf8数字占1个字节
一个utf8英文字母占1个字节
中日韩超大字符集里面的汉字占用4个字节,但是这些文字很少使用,虽然3个字节的5w多个,4个字节的6w多个,但我估计平常应用中,恐怕,99.9%占用三个字节,后面四个字节的中日韩超大字符集几乎没人用
参考博客:https://blog.csdn.net/cynhafa/article/details/6882061
字节流直接操作文件
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先
字符流通过缓冲区操作文件
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先
InputStream,OutputStream,Reader,writer都是抽象类。
所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的Encode来处理,也就是要进行字符集的转化。这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。