java 字节流 字符流
来源:互联网 发布:xp怎么网络共享打印机 编辑:程序博客网 时间:2024/05/17 17:43
java中的字节流和字符流的存储区别,用几个常用类型的数据来比较字节流和字符流的区别
int a=5;
boolean b=true;
char c='G';
String d="你好";
使用字符流打印以上类型的数据到文件中:
PrintWriter dos =new PrintWriter(new BufferedWriter(new FileWriter("c:\\buffertest.txt")));
dos.print(a);
dos.print(b);
dos.print(c);
dos.print(d);
结果如下:
a是5
b是true
c是G
d是你好
字符流完全保证了和我们输入的字符保持一致
再看看字节流
DataOutputStream dos =new DataOutputStream(new FileOutputStream("c:\\streamtest.txt"));
dos.writeInt(a);
dos.writeBoolean(b);
dos.writeChar(c);
dos.writeUTF(d);
dos.writeChars(d);
dos.writeBytes(d);
结果是二进制文件,我们用十六进制编辑器打开它
a是00 00 00 05,int是四个字节
b是01,布尔型变量是一个字节
c是00 47,char是两个字节
d分别用3个不同的函数打印在文件中
第一个是00 06 E4 BD A0 E5 A5 BD,前面的00 06是writeUTF加上去的,是字节的数目,后面六个字节是"你好"的UTF编码,每个汉字3个字节
第二个是4F 60 59 7D,这是"你好"的big endian的Unicode编码,每个汉字2个字节
第三个是60 7D,这是从4F 60 59 7D中分别取得两个汉字的低字节
进一步说明
用记事本保存不同的编码文件,文件的头部会有一些标记来识别文件的编码类型,用记事本的另存为就可以保存不同编码类型的文件,然后用记事本打开时就可以正确识别编码,如果用十六进制编辑器打开它们就会看到用来识别编码类型的标记被写在文件头部,这些类型说明如下:
EF BB BF UTF-8
FF FE UTF-16/UCS-2, little endian
FE FF UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
UTF-8保存一个字符时,长度为1-3个字节,也就是8bit-24bit。
其中code<= 007F的,保存为1个字节
(code >= 0080) && (code <= 0x07FF)的,保存为2个字节
code>0800的,保存为3个字节
"你好"的gb2312编码是C4 E3 BA C3,汉字大于0800,所以每个汉字保存为3个字节
little endian:低地址存放字节低位,x86是这种顺序
big endian:低地址存放字节高位,网络字节序是这种顺序
int a=5;
boolean b=true;
char c='G';
String d="你好";
使用字符流打印以上类型的数据到文件中:
PrintWriter dos =new PrintWriter(new BufferedWriter(new FileWriter("c:\\buffertest.txt")));
dos.print(a);
dos.print(b);
dos.print(c);
dos.print(d);
结果如下:
a是5
b是true
c是G
d是你好
字符流完全保证了和我们输入的字符保持一致
再看看字节流
DataOutputStream dos =new DataOutputStream(new FileOutputStream("c:\\streamtest.txt"));
dos.writeInt(a);
dos.writeBoolean(b);
dos.writeChar(c);
dos.writeUTF(d);
dos.writeChars(d);
dos.writeBytes(d);
结果是二进制文件,我们用十六进制编辑器打开它
a是00 00 00 05,int是四个字节
b是01,布尔型变量是一个字节
c是00 47,char是两个字节
d分别用3个不同的函数打印在文件中
第一个是00 06 E4 BD A0 E5 A5 BD,前面的00 06是writeUTF加上去的,是字节的数目,后面六个字节是"你好"的UTF编码,每个汉字3个字节
第二个是4F 60 59 7D,这是"你好"的big endian的Unicode编码,每个汉字2个字节
第三个是60 7D,这是从4F 60 59 7D中分别取得两个汉字的低字节
进一步说明
用记事本保存不同的编码文件,文件的头部会有一些标记来识别文件的编码类型,用记事本的另存为就可以保存不同编码类型的文件,然后用记事本打开时就可以正确识别编码,如果用十六进制编辑器打开它们就会看到用来识别编码类型的标记被写在文件头部,这些类型说明如下:
EF BB BF UTF-8
FF FE UTF-16/UCS-2, little endian
FE FF UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
UTF-8保存一个字符时,长度为1-3个字节,也就是8bit-24bit。
其中code<= 007F的,保存为1个字节
(code >= 0080) && (code <= 0x07FF)的,保存为2个字节
code>0800的,保存为3个字节
"你好"的gb2312编码是C4 E3 BA C3,汉字大于0800,所以每个汉字保存为3个字节
little endian:低地址存放字节低位,x86是这种顺序
big endian:低地址存放字节高位,网络字节序是这种顺序
0 0
- JAVA字节字符流
- Java字节、二进制、字节流、字符
- java字符流字节流
- java字节流、字符流
- java字节流字符流
- Java 字节流,字符流
- java 字节流 字符流
- java字符、字节流复制
- java 字节流转字符流
- Java 字节字符转换流
- java输入输出流,字节流,字符流
- Java 字节流 字符流 转换流
- Java的字符流和字节流
- java字节流和字符流
- java字节流和字符流
- java字节流和字符流
- Java字节流和字符流
- java字节流和字符流
- Mysql 命令行导入sql数据,访问网站出现中文乱码的解决
- 黑马程序员_高新技术_JDK1.5的新特性
- 接口(Interface)的应用方法
- consistent hash
- ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
- java 字节流 字符流
- 认识JSON+jayrock
- 燕歌行
- 对象的初始化的一些问题
- 算法基础(十):--有向图的邻接表创建
- android pull解析xml文件实例
- java反射机制 一
- 把Session保存在SqlServer中的实现
- 父窗口向子窗口传指针