import java.io.*;
public class Example10_10
{
public static void main(String args[])
{
RandomAccessFile in_and_out=null;
int data[]={1,2,3,4,5,6,7,8,9,10};
try{
in_and_out=new RandomAccessFile("tom.dat","rw");
}
catch(Exception e){}
try{
for(int i=0;i<data.length;i++)
{
in_and_out.writeInt(data[i]);
}
for(long i=data.length-1;i>=0;i--)
{
in_and_out.seek(i*4);
System.out.print(","+in_and_out.readInt());
}
in_and_out.close();
}
catch(IOException e){}
}
}
这个程序为什么运行之后的文件中是乱码?
public class Example10_10
{
public static void main(String args[])
{
RandomAccessFile in_and_out=null;
int data[]={1,2,3,4,5,6,7,8,9,10};
try{
in_and_out=new RandomAccessFile("tom.dat","rw");
}
catch(Exception e){}
try{
for(int i=0;i<data.length;i++)
{
in_and_out.writeInt(data[i]);
}
for(long i=data.length-1;i>=0;i--)
{
in_and_out.seek(i*4);
System.out.print(","+in_and_out.readInt());
}
in_and_out.close();
}
catch(IOException e){}
}
}
这个程序为什么运行之后的文件中是乱码?
输出结果如下 请帮忙看看 谢啦
按四个字节将 int 写入该文件,先写高字节。
这是API中的说明。
我想就是编码的事,我们用txt打开看到的是乱码,但实际上反过来读取的时候数据还是和原来一样的。
也就是说,你写入文件的是每一个v(整型数)对应的四个字节。readInt从此文件读取一个有符号的 32 位整数。此方法从该文件的当前文件指针开始读取 4 个字节。如果按顺序读取的字节为 b1、b2、b3 和 b4,其中 0 <= b1, b2, b3, b4 <= 255,则结果将等于:
(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
也就是说,readInt方法能相应的四个字节转化成整型输出综上,文件中输出的不是乱码,是字节
改成 int data[]={49,50,51,52,53,54,55,56,57,58};
你应该就可以明白“二进制文件”和“文本文件”的区别了
这里写入文件中的是二进制类型的,表示的是数据的存储方式,
如果要将这些数据显示出来,就应该把这些二进制数据转换成原来的字符。
一个文件编辑工具通常是以字符的形式来显示存储的数据的,
它会以某种编码/解码规则来将文件数据以字符的形式展现出来。举例说明,
如果你写入文件的字节是0x1234,
打开这个文件的编辑器默认使用的是ascii编码,
那么,编辑器就会以ascii字符的形式来显示0x1234,
一旦ascii字符表中找不到对应的字符,
输出来的形式自然会形成一些类似楼主提到的乱码。就像楼上所言,乱码是因为你用文本编译器打开得原因。
public class WRITEINT
{
public static void main(String args[])
{
RandomAccessFile in_and_out=null;int data[]={64,16448,4210752,1077952576};//int data[]={1,2,3,4,5,6,7,8,9,10};
//分别对应以下
//64对应 00000000 00000000 00000000 01000000, 各八位(八位即一字节)对应的字符分别是null,null,null,@
//16448对应 00000000 00000000 01000000 01000000
//4210752对应 00000000 01000000 01000000 01000000
//1077952576对应 01000000 01000000 01000000 01000000
try{
in_and_out=new RandomAccessFile("tom.txt","rw");
}
catch(Exception e){}
try{
for(int i=0;i<data.length;i++)
{
in_and_out.writeInt(data[i]);
//按四个字节将 int 写入该文件,先写高字节。写入从文件指针的当前位置开始。
//tom.txt 输出结果 : @ @@ @@@@@@@
}
for(long i=data.length-1;i>=0;i--)
{
in_and_out.seek(i*4);
System.out.print(","+in_and_out.readInt());
}
in_and_out.close();
}
catch(IOException e){System.out.println(e);}
}
}总结:显然,writeInt(int)写入文件的是的int(ascii 码)对应的字符,readInt() 的用法不多说了