import java.io.*;public class IO 
{ public static void main(String[] args) throws IOException 
{ BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("C:\\Users\\yafee\\Desktop\\temp.txt"));

byte[] data="Hello,我是乔布斯".getBytes();

for (int i = 0; i < data.length; i++) {
System.out.print(data[i]);
}

out.write(data);
out.close();
}
}控制台的结果为:
72101108108111-93-84-50-46-54-57-57-57-78-68-53-71我有一点搞不懂:
我本来是把“Hello,我是乔布斯”这个字符串转化为字节数组,存在temp.txt这个文件中,所以temp.txt文件里存的应该是“72101108108111-93-84-50-46-54-57-57-57-78-68-53-71”(因为我通过for循环在控制台打印出来的就是“72101108108111-93-84-50-46-54-57-57-57-78-68-53-71”),但是为什么现在temp.txt文件里的内容是“Hello,我是乔布斯”呢???

解决方案 »

  1.   

    因为 temp.txt 是个 GBK 编码的 文本文件。
      

  2.   

    print输出的是byte的字符串表示,write写入的是字节。
      

  3.   


    能不能具体点啊???如果我把它保存为.dat也是这样的结果
      

  4.   

    temp.txt 的二进制内容就是72……………,你使用FileInputStream读这个文件,第一次read返回的就是 72。
      

  5.   


    改变后缀名,无法更新文件的字符集编码1.记事本打开temp.txt2.菜单    打开  另存为  选择“utf-8”编码
      

  6.   

    你用记事本打开的文件,看到的内容被“记事本”这个编辑软件根据编码格式解释后的了记事本有具有这个智能功能,可以识别utf-8,ansi....等等格式的文件那些中文符号,在内存中由多个字节组合而成 你打开的是gbk编码格式的文件,此时,2个字节足以表示一个中文字符
      

  7.   

    文件中的内容在内存中是2进制,不用质疑,为了书写方便和读写方便,你更喜欢看到十六禁止
    如果你想看到   文件中内容的十六进制形式    是长啥样的
    那么用文本编辑软件ultraedit打开它,
    菜单----编辑----十六进制函数-----十六进制编辑-----就能看到这是的十六进制数