import java.io.*;
public class a{
 public static void main(String args[])
 {
  try{
   FileOutputStream fout=new FileOutputStream("A.txt");
   DataOutputStream dfout=new DataOutputStream(fout);
   int i;
   for(i=0;i<4;i++)
    dfout.writeInt('0'+i);
    dfout.close();
    FileInputStream fin = new FileInputStream("A.txt");
    DataInputStream dfin=new DataInputStream(fin);
    for(i=0;i<4;i++)
     System.out.print(dfin.readInt()+",");
     dfin.close();
    
   
  }
  catch(Exception e)
  {
   System.err.println("发生异常"+e);
   e.printStackTrace();
  }
 }
}
书上说最后执行的结果是在文件"A.txt"中写入4个整数:48,49,50,51.在控制台窗口也是输出48,49,50,51.为什么我在自己电脑上运行却不一样:A.txt中的4个整数是:0,1,2,3.控制台输出的是一样的? 
是不是书上写错了?

解决方案 »

  1.   

    dfout.writeInt('0'+i),这一句确认一下,可能你调试的程序中0没有加单引号。
      

  2.   

    这就很奇怪了,字符‘0’的int值为48,不应该输出0啊
      

  3.   

    writeInt是将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。有没发现文件里面0,1,2,3是间隔是3个长度
      

  4.   

    其实就是每4位为一个byte,文件中存放了4个byte[4]数组。至于为什么看到是0,1,2,3,我不是很清楚,大概是因为第三位上的3属于16进制的十位,不可能展现成30吧
      

  5.   

    可是我的书上是这样写的:
    最后执行结果是在文件'A.txt'中写入4个整数,分别是:48,49,50,51.这时在文件中储存16个字节的数据,这16字节的数值分别为0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,接着在控制台窗口中输出:48,49,50,51?
      

  6.   

    DataOutputStream是以二进制流的方式写入文件的,每个int对应4个byte,即一个字,而且java是big endian的,高字节在低位上和intelx86的cpu的little endian 不一样。如果用二进制的文本编辑器打开会看到0,1,2,3前面有乱码,而记事本虽然看不到乱码,其实每个数字前面还是有3个东西的。