import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class J_Data
{
    public static void main(String args[ ])
    {
        try
        {            FileOutputStream fout = new FileOutputStream("out.txt");
            DataOutputStream dfout =new DataOutputStream(fout);
            int i;
            for (i=0; i< 4; i++)
                dfout.writeInt('0' + i);
            dfout.close( );            FileInputStream fin= new FileInputStream("out.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( );
        } // try-catch结构结束
    } // 方法main结束
} // 类J_Data结束这个程序运行后,文件out.txt写入的是   0   1   2   3,
输出的却是48,49,50,51,为什么呢?

解决方案 »

  1.   

    可以看看DataInputStream类的readInt()方法:读取四个输入字节并返回一个 int 值。设 a-d 为四个读取字节中的第一个字节。返回的值是: 
     (((a & 0xff) << 24) | ((b & 0xff) << 16) |
      ((c & 0xff) << 8) | (d & 0xff))
      

  2.   

    字符'0'的int值是48,
    dfout.writeInt('0' + i);
    你这句代码将输入分别改成了 48+0 48+1 48+2 48+3  so^
      

  3.   

    Ascii码和数字值之间的转换问题吧
      

  4.   

    基本数据类型执行算术运算或按位运算时,类型都会自动提升,而这里char类型比int小,所以运算前char先自动转化为int,此时char类型的‘0’为48了,所以会得到你现在的结果。
      

  5.   

    字符'0'的int值是48,
    dfout.writeInt('0' + i);
    你这句代码将输入分别改成了 48+0 48+1 48+2 48+3 so^
      

  6.   

    没有将数据转换成int 类型的吧
      

  7.   

    输入的是字符,输出的是ASCII码
      

  8.   

    能说得清楚点吗?我的理解是:
    输出到文件out.txt的是字符
    显示在控制台的是ASCII码不知正确否?
      

  9.   


    我不同意,本身就是已经经过数据包装的流 DataOutputStream和FileOutputStream,而使用的也是它们的
    writeInt()方法,也就是说,输入的时候是一个整形一个整形输入,即4个字节4个输入.
    读的时候readInt()方法也是4个字节4个字节读的.那么你这样说就不通了.LZ的问题出现的原因是他在写入文件的时候就默认将('0'+i)这个表达式转化成int值,再写入文件,这时候如果打开文件看可以看到结果已经是48,49,50,51了,也就是说48,49,50,51已经作为4个整数保存在文件中.而不存在你这种说法.
      

  10.   

    dfout.writeInt('0' + i);
    你写入的其实是48,49
    而你的文件以文本方式打开的时候就是0,1,了。
    当然因为1个int有4个字节的,其它3个字节因为是0就没有显示出来了。
      

  11.   

    那么简单的问题
    正如方法名所说的writeInt() 那写入的数据就应该是整型类型的
    '0'所对应的ascii是多少?
      

  12.   

    将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
      

  13.   

    要不不要用datainputstrem和dataoutputstream,用objectinputstream和objectoutputstream试试