【问题标题】:In RandomAccessFile why is 0 the first position and 8 the fourth?在 RandomAccessFile 中,为什么 0 是第一个位置而 8 是第四个?
【发布时间】:2016-05-10 05:20:19
【问题描述】:

下面是我的程序,

public class RandomAccessDemo {
public static void main(String[] args) {
    double data[] = { 19.4, 10.1, 123.54, 33.0, 87.9, 74.25 };
    double d;
    // open and use a random access file
    try (RandomAccessFile raf = new RandomAccessFile("random", "rw")) {
        // write values to the file
        for (int i = 0; i < data.length; i++) {
            raf.writeDouble(data[i]);
        }
        // now read back specific values
        raf.seek(0);// seek to first double
        d = raf.readDouble();
        System.out.println("First Values is " + d);

        raf.seek(8);// seek to first double
        d = raf.readDouble();
        System.out.println("Second Values is " + d);

        raf.seek(8 * 3);// seek to first double
        d = raf.readDouble();
        System.out.println("Fourth Values is " + d);

        System.out.println();
        // Now read every other value
        System.out.println("Here is every other value:");
        for (int i = 0; i < data.length; i += 2) {
            raf.seek(8 * i);// seek to ith double
            d = raf.readDouble();
            System.out.println(d + " ");
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

我想知道为什么第一个位置是 0,第二个值是 8,第四个值是 8 *3?这些数字对应什么?此外,当它向“随机”写入数据时,java 是否会创建一个名为 random 的文件?我没有创建文本文件,所以这个随机文件存储在哪里?

【问题讨论】:

  • 如何阅读课程的javadoc,这样您就不必在这里询问所有内容。尝试一下tutorials

标签: java eclipse random io randomaccessfile


【解决方案1】:

位置以字节为单位; 0 是第一个字节,1 是第二个字节,依此类推。双精度是 8 个字节,所以这就是为什么你会得到 8x 的行为。

在这种情况下,“随机”一词并不意味着它是一个随机文件,而是您可以随时访问的文件的任何部分(而不是总是必须从头开始,然后才继续前进) .从系统的角度来看,您可以以随机偏移量访问文件。文件本身可以在任何地方,传递给构造函数的参数指定它的路径。

【讨论】:

  • Random 可能不是文件的最佳名称,所以当我在 RandomAccessFile 的参数中输入 random 时,它会创建一个新文件吗?它存储在哪里?
  • 文件存放在工作目录下;基本上无论你在哪里运行程序。使用“rw”的第二个参数,是的,如果该文件尚不存在,则将创建该文件。有关更多信息,请参阅文档:docs.oracle.com/javase/7/docs/api/java/io/…
【解决方案2】:

对于您的第一个问题, 随机访问文件允许对文件内容进行非顺序或随机访问。要随机访问文件,您需要打开文件,寻找特定位置,然后读取或写入该文件。同样,它以字节为单位,即 8 位,这就是它变为 0、8、8 * 2 等的原因。

对于您的第二个问题,“随机”应该是您文件名的位置 例如。如果您想将文件写入 D: 驱动器,则应创建“D:\random.txt”,它将在 D: 驱动器位置生成 random.txt 文件。 如果您只是创建“D:\random”,是的,它会为您创建一个随机文件,但它会缺少它是什么类型的文件。

【讨论】:

  • 所以如果我只是在没有 .txt 的情况下随机输入它仍然可以工作,那么在这种情况下会创建什么样的文件?
  • 如果你把它不带扩展名,它应该创建一个由文件对象描述的文件。查看更多信息:https://docs.oracle.com/javase/7/docs/api/java/io/File.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 2023-03-05
  • 2020-01-15
  • 2013-06-04
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多