黑马程序员技术交流社区
标题:
IO流中的字节输出流,写出信息的问题
[打印本页]
作者:
于XINCHENG
时间:
2013-8-7 18:44
标题:
IO流中的字节输出流,写出信息的问题
本帖最后由 于XINCHENG 于 2013-8-7 20:02 编辑
向大家请教一个问题,IO流的字节输出流,输入字母或数字(写出文件信息)时需要单引号进行修饰,但是经过单引号修饰的字母或数字为一个
字符
,还有一种方法就是将
字符串
转换为
字节数组
进行写入,为什么直接写出时的单位是
字符
,而转换成数组时的单位是
字节
?
1.png
(14.5 KB, 下载次数: 15)
下载附件
2013-8-7 18:44 上传
2.png
(30.48 KB, 下载次数: 26)
下载附件
2013-8-7 18:44 上传
作者:
李政
时间:
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后,本来是两个字节的字,确只查到了一个字节,就成了乱码了。
题外话:对于第三点,即使将 '中' 这个字符的两个字节都输入到了记事本里面,也不一定能显示出来。
我试验过,汉字的字符形式'中' 和 字符串形式 "中" 这两个数据 在内存中虽然都是两个字节,但字节码是不一样的
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-中 显然前两个字节对应的不是 中
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2