使用RandomAccessFile写入和读取的格式是什么

时间:2014-04-09 19:18:20

标签: java file randomaccessfile

char[] input =new char[24];
        for (int i=0; i<24; i++){
            input[i] = (char)('a'+i);
        }
        RandomAccessFile bf = new RandomAccessFile("data1.txt", "rw");
        for(int i=0; i<24; i++){
            bf.writeChar(input[i]);
        }

使用上面的代码,当我打开文件时,它似乎是&#34; abcd ...&#34;正如我所料,但当我尝试阅读文件时

RandomAccessFile rf1  = new RandomAccessFile("data1.txt", "r");
   rf1.seek(0);
   System.out.println(rf1.readChar());
   rf1.seek(1);
   System.out.println(rf1.readChar());

    rf1.close();

它给出了一个&#39;正如所料,但在寻求(1)它给了我?而不是b,为什么?

2 个答案:

答案 0 :(得分:1)

char是16位,即2个字节。您正在从第一个字符的中间读取,这会导致一个不可映射的unicode字符(转换为'?')。您想改为seek(2)

来自public final void writeChar(int v)的javadoc:

  

将char作为双字节值写入文件,首先是高字节。该   write从文件指针的当前位置开始。

答案 1 :(得分:0)

RandomAccessFile的{​​{1}}和readChar方法读取/写入Unicode(2字节)代码点。

writeChar方法将文件访问指针定位为以字节为单位的偏移量,因此seek将读取指针放在Unicode“a”的第二个字节上,后面的seek(1)检索从低位构造的Unicode字符“a”的字节和“b”的高字节