import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class JDate
{
    public static void main(String[] args)
    {
        try
        {
            FileOutputStream fout=new FileOutputStream("./src/file.txt");
            DataOutputStream dfout=new DataOutputStream(fout);
            int i;
            for(i=0;i<4;i++)
            {
                int j='0'+i;
                System.out.println(j);
                dfout.writeInt(j);
            }
            dfout.close();
            
            FileInputStream fin = new FileInputStream("./src/file.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();
        }
    }
}
以上是我在书上摘取的代码,编译没有问题,使用的是Neabean。输出结果是
48
49
50
51
48,49,50,51,
这个没错,可我在文件file,txt中看到的是:
   0   1   2   3
可是书上说的是:写入4个整数:48,49,50,51.
个人认为是书上出错了,本来在4个字节中,由于i只占1个字节,前面3个字节为空。
这是我的认识错了,还是书上错了???

解决方案 »

  1.   

    i怎么会占用一个字节呢?Java中整型变量是四个字节32位的
      

  2.   

    分析下程序,首先writeInt(‘0’+0)其实就是writeInt(48),因为'0'的ascii码就是48。
    int类型在Java中占有四个字节,当写入到txt文件(ansi编码格式)时会将48的二进制流写到文件中,而txt文件需要将这个二进制流以ASCII码的形式显示在屏幕上也就是再将48转化为字符'0'。
    所以你在文件中会看到   0   1   3   4
    同样从文件中读入的时候就是相反的。
    这里有点牵扯到编码的问题,楼主可以研究下
      

  3.   

    很对呢
    int j='0'+i;
    看这句话就知道了
      

  4.   

    谢谢,明白了,是txt文件显示的是ASCII码,所以是0 1 2 3.谢谢