在RandomAccessFile中,为什么0是第一个位置,8是第四个位置?

时间:2016-05-10 05:20:19

标签: java eclipse random io randomaccessfile

以下是我的程序,

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的文件吗?我没有创建文本文件,所以这个随机文件存储在哪里?

2 个答案:

答案 0 :(得分:0)

位置以字节为单位; 0是第一个字节,1是第二个,等等。双打各8个字节,这就是你获得8x行为的原因。

此上下文中的“随机”一词并不意味着它是一个随机文件,但这是一个你可以随时访问任何部分的文件(而不是总是必须从头开始而只是前进) 。从系统的角度来看,您可以随机偏移访问该文件。文件本身可以在任何地方,传递给构造函数的参数指定其路径。

答案 1 :(得分:0)

关于你的第一个问题, 随机访问文件允许对文件内容进行非顺序或随机访问。要随机访问文件,请打开文件,查找特定位置,以及读取或写入该文件。同样,它以字节为单位测量,这是8位,这就是为什么它变为0,8,8 * 2等等。

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