-
首先要明白字节与字符的概念,哪个包含范围更广,不要搞混概念了,应该是字节(byte)<=字符
- 字节(byte)是计算机的存储容量的基本计量单位,通常最小读写一个字节的单位,一个字节等于八位。java基本数据类型有字节类型Byte,占计算机容量是八个位,可区别256个数字,取值范围:0到255。 Byte是从0-255的无符号类型,所以不能表示负数。
- 字符是表示计算机中的符号,字母,汉字等符号,在不同的编码方式下一个字符占的字节数是不同的。ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值-128,最大值127。如一个ASCII码就是一个字节。UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。
-
字节流与字符流的区别
字节流不会使用到缓冲区,也就是内存。
字符流读写时会会使用到内存,读取内存速度会比较快,这样可以提升程序的性能。
字节流(InputStream,OutputStream)
字节流
File f = new File("test.txt"); // 声明File 对象
OutputStream out = new FileOutputStream(f);
String str = "Hello World!!!";
byte b[] = str.getBytes();
out.write(b);
// out.close();
// 此时没有关闭,也可成功写入文件
字符流(Reader,Writer)
字符流
File f = new File("test.txt");// 声明File 对象
Writer out = new FileWriter(f);
String str = "Hello World!!!";
out.write(str);
// 第4步:关闭输出流
// out.close();
// 此时没有关闭,文件中没有内容。
//是因为内存中的数据没有被写入文件,要强制flush或close,此时缓冲区的数据会写入文件中
-
什么情况使用字节流,什么情况使用字符流
如果是音频文件、图片、歌曲,就用字节流好点
是关系到中文(文本)和多国语言支持的,用字符流好点.
原因:所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成。字节流与字符流主要的区别是他们的的处理方式,实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。字符流是按虚拟机的encode来处理,也就是要进行字符集的转化,在从字节流转化为字符流时,实际上就是byte[]转化为String时,而在字符流转化为字节流时,实际上是String转化为byte[]时。