黑马程序员技术交流社区

标题: IO流中的字节输出流,写出信息的问题 [打印本页]

作者: 于XINCHENG    时间: 2013-8-7 18:44
标题: IO流中的字节输出流,写出信息的问题
本帖最后由 于XINCHENG 于 2013-8-7 20:02 编辑

向大家请教一个问题,IO流的字节输出流,输入字母或数字(写出文件信息)时需要单引号进行修饰,但是经过单引号修饰的字母或数字为一个字符,还有一种方法就是将字符串转换为字节数组进行写入,为什么直接写出时的单位是字符,而转换成数组时的单位是字节


1.png (14.5 KB, 下载次数: 15)

1.png

2.png (30.48 KB, 下载次数: 26)

2.png

作者: 李政    时间: 2013-8-7 22:17
本帖最后由 李政 于 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后,本来是两个字节的字,确只查到了一个字节,就成了乱码了。
题外话:对于第三点,即使将 '中' 这个字符的两个字节都输入到了记事本里面,也不一定能显示出来。
我试验过,汉字的字符形式'中'  和 字符串形式 "中"   这两个数据 在内存中虽然都是两个字节,但字节码是不一样的
  1. import java.io.*;
  2. class Demo
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 FileOutputStream f = new FileOutputStream("1.txt");
  7.                 f.write('中'>>8);
  8.                 f.write('中'); //
  9.                 f.write("中".getBytes());

  10.                 //打印结果为 N-中 显然前两个字节对应的不是 中
  11.         }
  12. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2