日期:2014-05-20  浏览次数:20806 次

关于java文件流的问题
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个字节为空。
这是我的认识错了,还是书上错了???

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