簡體   English   中英

在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是第四個值? 這些數字對應什么? 另外,當將數據寫入“隨機”時,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM