本帖最后由 李政 于 2013-8-7 22:45 编辑
1 ,FileOutputStream没有直接输入字符串的方法
如果想用字符流的操作方式来操作字节流,可以用转换流 OutputStreamWriter
2 ,输出字节流中的write方法接受的是一个整数
当写writ('a')时,相当于写的是 wirte(97)
因为在java中 'a'就是等于整数97,这其中有一个类型的自动转换,这是查ACSII码表得到的值 'a' = 97 ,即使对一个整数类型的变量赋值一个字符型常量也是可以的 如
int x = 'a'; //打印x的结果为97
下面也可以
char c = 97//打印c的结果是a
3,wirte()方法输出的是这个整数的最后一个字节,一个中文字符 '中' 也有相对应的字节码,而且有效字节是两个字节,当调用write方法写'中'的时候,只会取最后一个字节。
输入到记事本查GBK后,本来是两个字节的字,确只查到了一个字节,就成了乱码了。
题外话:对于第三点,即使将 '中' 这个字符的两个字节都输入到了记事本里面,也不一定能显示出来。
我试验过,汉字的字符形式'中' 和 字符串形式 "中" 这两个数据 在内存中虽然都是两个字节,但字节码是不一样的- import java.io.*;
- class Demo
- {
- public static void main(String[] args) throws Exception
- {
- FileOutputStream f = new FileOutputStream("1.txt");
- f.write('中'>>8);
- f.write('中'); //
- f.write("中".getBytes());
- //打印结果为 N-中 显然前两个字节对应的不是 中
- }
- }
复制代码 |