【问题标题】:RandomAccessFile getFilePointer outputRandomAccessFile getFilePointer 输出
【发布时间】:2017-03-15 04:46:04
【问题描述】:

我有一个文件a.txt,其内容使用writeUTF() 编写,

Dog
Cat
Rat

现在,我在读回内容的同时,也在打印指针位置,指针位置不正确。

代码:

public static void main(String[] args) throws Exception 
{
    RandomAccessFile ra = new RandomAccessFile("a.txt", "rw");
    System.out.println("Pointer:  " + ra.getFilePointer());
    ra.writeUTF("Dog\n");
    ra.writeUTF("Cat\n");
    ra.writeUTF("Rat");
    ra.seek(0);
    System.out.println(ra.readLine()+ "  " + ra.getFilePointer());
    ra.close();

}

输出:

Pointer: 0
Dog 6

1). 指针位置不应该是4吗?因为在阅读Dog 之后,它的位置是3,而在阅读\n 之后,它应该是46 的显示效果如何?

2).另外,当我读取整个文件时,它显示的位置是17。但是只有9 字符、2 换行字符和1 EOF(我们是否也应该考虑这一点?)。

3). 如果我在Cat 之前写\n 而不是Dog\n,就像Dog \nCatwriteUTF() 中一样,它会在之后输出不同的位置,即8阅读Dog

代码:

public static void main(String[] args) throws Exception 
{
    RandomAccessFile ra = new RandomAccessFile("a.txt", "rw");
    System.out.println("Pointer:  " + ra.getFilePointer());
    ra.writeUTF("Dog");
    ra.writeUTF("\nCat");
    ra.writeUTF("\nRat");
    ra.seek(0);
    System.out.println(ra.readLine()+ "  " + ra.getFilePointer());
    ra.close();

}

输出:

Pointer: 0
Dog 8

【问题讨论】:

    标签: java io java-io randomaccessfile


    【解决方案1】:

    getFilePointer 以字节为单位显示位置。 “修改的 UTF-8”使用 1、2 或 3 个字节来创建一个字符。

    http://docs.oracle.com/javase/7/docs/api/java/io/DataInput.html#modified-utf-8

    还要注意 writeUTF 方法如何作用于 RandomAccessFile 对象:

    http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html#writeUTF(java.lang.String)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      相关资源
      最近更新 更多