在randomaccessfile中,为什么0是第一位,8是第四位?

mitkmikd  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(390)

下面是我的程序,

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是第四个值?这些数字对应什么?另外,当它将数据写入“random”时,java是否创建了一个名为random的文件?我没有创建文本文件,所以这个随机文件存储在哪里?

k4aesqcs

k4aesqcs1#

位置以字节为单位测量;0是第一个字节,1是第二个字节,以此类推。双倍的每个字节是8个字节,这就是为什么会出现8x行为。
在本文中,“random”一词并不意味着它是一个随机文件,而是一个您可以随时访问其中任何部分的文件(而不是总是从一开始就开始,只向前)。从系统的Angular 来看,您可以以随机偏移量访问文件。文件本身可以在任何地方,传递给构造函数的参数指定其路径。

tez616oj

tez616oj2#

对于第一个问题,随机访问文件允许对文件内容进行非顺序或随机访问。要随机访问文件,请打开文件,查找特定位置,然后读取或写入该文件。同样,它是用字节来度量的,字节是8位,这就是为什么它是0,8,8*2,等等。
对于第二个问题,“random”应该是文件名的位置,例如,如果您想在d:drive写入文件,您应该创建“d:\random.txt”,它将在d:drive位置生成random.txt文件。如果你只是创建“d:\random”,是的,它会创建一个随机文件,但它将缺少什么类型的文件。

相关问题