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<10;i++)
 dfout.writeInt('0'+i);
  dfout.close();
  
  FileInputStream fin=new FileInputStream("out.txt");
  DataInputStream dfin=new DataInputStream(fin);                                           
  for(i=0;i<10;i++)
  System.out.print(dfin.readInt()+",");
  dfin.close();
}
catch(Exception e)
{
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
}
输出台:48,49,50,51,52,53,54,55,56,57,
out.txt:0,1,2,3,4,5,6,7,8,9
这是什么原理,怎么输出台会这样的?

解决方案 »

  1.   

    看看下面的这个,文本在文件中如何存储依赖于文件的编码方式。Java对文本I/O提供自动编码与解码。48正好是0的Unicode编码,所以Java自动编码为Unicode,所以输出为0.
    文本在文件中如何存储依赖于文件的编码方式。Java对文本I/O提供自动编码与解码
      

  2.   

    其实编码是一个问题,还有就是文本文件中存储的是字符,而字数是整数的一种,所以 readInt() 就会输出一个个数字。这也更好的说明了计算机本身是处理数字的。
      

  3.   

    输出的是ascii码值,当然是48,49了。在磁盘上存储的字节内容就是0,1的ascii码值,用文本编辑器打开显示成0,1了。
      

  4.   

    Java的字符都用Unicode编码,0的unicode码是0x0030,就是原先的8位ascii码变成16位