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

使用上面的代码,当我打开文件时,它似乎是"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",但当搜索(1(时,它给出了我?而不是b,为什么?

字符是16位,即2个字节。您正在从第一个字符的中间读取,这将导致一个不可映射的unicode字符(翻译为"?"(。您想改为执行seek(2)

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

将一个字符以两字节值的形式写入文件,高位字节优先。这个写入从文件指针的当前位置开始。

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

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

相关内容

  • 没有找到相关文章

最新更新