import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 public class J_Data {
 
  /**
   * @param args
   */
  public static void main(String[] args) {
  // TODO Auto-generated method stub
         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();
         }
  }
 
 }
请问:为什么写入out.txt中的是“   0   1   2   3”,而不是预期的“   48   49   50   51”?
 

解决方案 »

  1.   


    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) {
    // TODO Auto-generated method stub
    try{
    FileOutputStream fout = new FileOutputStream("out.txt");
    DataOutputStream dfout = new DataOutputStream(fout);
    dfout.writeInt('0' - 1);
    dfout.writeInt('0');
    dfout.writeInt('0' + 1);
    dfout.writeInt(1);
    dfout.writeInt('中');
    FileInputStream fin = new FileInputStream("out.txt");
    DataInputStream dfin = new DataInputStream(fin);
    System.out.println(dfin.readInt());
    System.out.println(dfin.readInt());
    System.out.println(dfin.readInt());
    System.out.println(dfin.readInt());
    System.out.println(dfin.readInt());
    }catch (Exception e){
    System.err.println("发生异常:"+e);
    e.printStackTrace();
    }
    }
    }
        楼主你好,关于你的问题在控制台打印结果为"48,49,50,51",而直接打开out.txt却是"0,1,2,3",
    你可以运行一下以上的代码.对比下控制台结果和txt里的结果,再看下面的解释.
        DataOutputStream本来就是用来写二进制数据的,你直接打开out.txt当然
    看到的是乱码,而用DataInputStream按你写的顺序读进来看就对了。
      

  2.   

    DataInputStream 和DataOutputStream属于 字节流,它是一个字节一个字节的写或读。而java中int是4个字节,所以文件中不可能是正确的数。你看到的0,1,2,3其实并不完全,如果用noteplus打开
    至于为什么system.println()可以正确读出来,可能是系统调用默认格式如utf-8.这个不确定。
      

  3.   

    注意这句: dfout.writeInt('0' + i);当一个字符型数据和整数型数据计算时,会发生自动向上转型,此时得到的数据是整数型,结果也就是你看见的0,1,2...如果要想写入字符型数据,则需要强制向下转型,改为这样: dfout.writeInt((char)('0' + i));
      

  4.   

    或者改为这样:dfout.writeChar('0' + i);
      

  5.   

    首先说下,楼主的这个问题很好,楼上很多人回答的也很好.
    不过原因是这样子的您写入文件的是int 的,其实还是转换为字符写入的,是 0 1 2 3但是你读出来的是int读出来的,但是这个int是从流里面一byte读取出来的个人觉得写入的是字符读取出来是char的,读取出来的其实也是0 1 2 3 
    但是转换成了48 49 50 51的
      

  6.   


    2楼说的对,如果想在out.txt中能看到结果,建议用字符流类OutputStreamWriter或FileWriter