0
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]);
        }

使用上面的代码,当我打开文件时,它似乎是“abcd ...”,但当我尝试读取文件时

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();

它按预期给出了“a”,但是当 seek(1) 它给了我?而不是b,为什么?

4

2 回答 2

1

一个 char 是 16 位,即 2 个字节。您正在从第一个字符的中间读取,这会导致无法映射的 unicode 字符(被翻译为“?”)。你想做的seek(2)

从 javadoc 为public final void writeChar(int v)

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

于 2014-04-09T19:22:08.707 回答
0

RandomAccessFilereadCharwriteChar方法读取/写入 Unicode(2 字节)代码点。

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

于 2014-04-09T19:32:22.537 回答