[英]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是第四個值? 這些數字對應什么? 另外,當將數據寫入“隨機”時,java是否會創建一個名為random的文件? 我沒有創建文本文件,所以此隨機文件存儲在哪里?
位置以字節為單位; 0是第一個字節,1是第二個字節,依此類推。雙精度數每個都是8字節,因此這就是為什么您獲得8x行為的原因。
在這種情況下,“隨機”一詞並不意味着它是一個隨機文件,而是可以隨時訪問文件的任何部分(相對於始終必須從頭開始並且只能向前)。 從系統的角度來看,您可以隨意偏移訪問文件。 文件本身可以在任何地方,傳遞給構造函數的參數指定其路徑。
對於第一個問題,隨機訪問文件允許對文件的內容進行非順序或隨機訪問。 要隨機訪問文件,請打開文件,查找特定位置,然后從該文件讀取或寫入該文件。 同樣,它以字節為單位進行測量,這是8位,這就是為什么它變為0、8、8 * 2等。
對於第二個問題,“隨機”應該是文件名的位置。 如果要在D:驅動器上寫入文件,則應創建“ D:\\ random.txt”,它將在D:驅動器位置生成random.txt文件。 如果僅創建“ D:\\ random”,是的,它將創建一個隨機文件,但是缺少哪種文件類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.