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){}
}
}
这个程序为什么运行之后的文件中是乱码?

解决方案 »

  1.   

    我想不是乱码,而是ASCII码,如果你想输入1-10,最好看看他的ASCII码是多少。
      

  2.   

    比如你writeInt(65)输出可能是    A .int为4字节,前面会有3个空格。
      

  3.   

    不是ASCII码啊
    输出结果如下  请帮忙看看  谢啦
                                   
      

  4.   

    用OutputStreamWriter流试试,可以指定字符编码
      

  5.   

    writeInt(int v) 
              按四个字节将 int 写入该文件,先写高字节。
    这是API中的说明。
    我想就是编码的事,我们用txt打开看到的是乱码,但实际上反过来读取的时候数据还是和原来一样的。
      

  6.   

    你输入的byte值,而不是字符的序列化byte,不一样的。你要对照writer的 CharSet 来看你输入的byte到底是什么。1-128所有CharSet都是 ASCII,超过这个数值后,就要找到 CharSet 对应的编码表去看是什么东东了。中文 windows 默认的是 GBKUNIX 默认是UTF-8楼主去了解下字符集知识,会比较好。
      

  7.   

    writeInt(int v)是)按四个字节将 v(整型数) 写入该文件,先写高字节。写入从文件指针的当前位置开始。
    也就是说,你写入文件的是每一个v(整型数)对应的四个字节。readInt从此文件读取一个有符号的 32 位整数。此方法从该文件的当前文件指针开始读取 4 个字节。如果按顺序读取的字节为 b1、b2、b3 和 b4,其中 0 <= b1, b2, b3, b4 <= 255,则结果将等于: 
    (b1 << 24) | (b2 << 16) + (b3 << 8) + b4
    也就是说,readInt方法能相应的四个字节转化成整型输出综上,文件中输出的不是乱码,是字节
      

  8.   

    里面是类似与字节码文件的字节码,就像.class 文件里的一样,这是一种类似于机器码的码。读出来是没问题的。
      

  9.   

    楼上dyh200896所说的write是对的。如果涉及到看到的文件,就已经是文件view的char了。这点需要更正。byte是针对存储的,一旦涉及展现,就回转化为字符,这个也是文件编辑工具提供的功能。
      

  10.   

    int data[]={1,2,3,4,5,6,7,8,9,10};
    改成 int data[]={49,50,51,52,53,54,55,56,57,58};
    你应该就可以明白“二进制文件”和“文本文件”的区别了
      

  11.   


    这里写入文件中的是二进制类型的,表示的是数据的存储方式,
    如果要将这些数据显示出来,就应该把这些二进制数据转换成原来的字符。
    一个文件编辑工具通常是以字符的形式来显示存储的数据的,
    它会以某种编码/解码规则来将文件数据以字符的形式展现出来。举例说明,
    如果你写入文件的字节是0x1234,
    打开这个文件的编辑器默认使用的是ascii编码,
    那么,编辑器就会以ascii字符的形式来显示0x1234,
    一旦ascii字符表中找不到对应的字符,
    输出来的形式自然会形成一些类似楼主提到的乱码。就像楼上所言,乱码是因为你用文本编译器打开得原因。
      

  12.   

    RandomAccessFile貌似这是处理2进制文件的类,读出来肯定是2进制
      

  13.   

    import java.io.*;
    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() 的用法不多说了