在 RandomAccessFile 中,为什么 0 是第一个位置而 8 是第四个?
In RandomAccessFile why is 0 the first position and 8 the fourth?
下面是我的程序,
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 的文件吗?我没有创建文本文件,所以这个随机文件存储在哪里?
位置以字节为单位; 0 是第一个字节,1 是第二个字节,依此类推。每个双精度数都是 8 个字节,所以这就是为什么你得到 8x 行为的原因。
单词 "random" 在此上下文中并不意味着它是一个随机文件,而是一个您可以随时访问其中任何部分的文件(而不是总是必须从头开始然后只会向前)。从系统的角度来看,您可以访问随机偏移量的文件。文件本身可以在任何地方,传递给构造函数的参数指定它的路径。
对于你的第一个问题,
随机访问文件允许对文件内容进行非顺序或随机访问。要随机访问文件,您打开文件,寻找特定位置,然后读取或写入该文件。同样,它以字节为单位测量,这是一个 8 位,这就是为什么它变成 0、8、8 * 2 等等。
对于你的第二个问题,"random" 应该是你的文件名的位置
例如。如果你想在 D: 驱动器写入你的文件,你应该创建 "D:\random.txt" 它会在 D: 驱动器位置生成 random.txt 文件。
如果你只是创建 "D:\random",是的,它会为你创建一个随机文件,但它会缺少它是什么类型的文件。
下面是我的程序,
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 的文件吗?我没有创建文本文件,所以这个随机文件存储在哪里?
位置以字节为单位; 0 是第一个字节,1 是第二个字节,依此类推。每个双精度数都是 8 个字节,所以这就是为什么你得到 8x 行为的原因。
单词 "random" 在此上下文中并不意味着它是一个随机文件,而是一个您可以随时访问其中任何部分的文件(而不是总是必须从头开始然后只会向前)。从系统的角度来看,您可以访问随机偏移量的文件。文件本身可以在任何地方,传递给构造函数的参数指定它的路径。
对于你的第一个问题, 随机访问文件允许对文件内容进行非顺序或随机访问。要随机访问文件,您打开文件,寻找特定位置,然后读取或写入该文件。同样,它以字节为单位测量,这是一个 8 位,这就是为什么它变成 0、8、8 * 2 等等。
对于你的第二个问题,"random" 应该是你的文件名的位置 例如。如果你想在 D: 驱动器写入你的文件,你应该创建 "D:\random.txt" 它会在 D: 驱动器位置生成 random.txt 文件。 如果你只是创建 "D:\random",是的,它会为你创建一个随机文件,但它会缺少它是什么类型的文件。