关于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
同样从文件中读入的时候就是相反的。
这里有点牵扯到编码的问题,楼主可以研究下