記憶體對映的 I/O

mmap(檔案記憶體對映)的低階模組。

Mmap.Anonymous類型
Mmap.Anonymous(name::AbstractString="", readonly::Bool=false, create::Bool=true)

建立一個類似 IO 的物件,用於建立未歸零的 mmap 記憶體,不連結到檔案,供 mmap 使用。SharedArray 用於建立共用記憶體陣列。

範例

julia> using Mmap

julia> anon = Mmap.Anonymous();

julia> isreadable(anon)
true

julia> iswritable(anon)
true

julia> isopen(anon)
true
Mmap.mmap函式
mmap(io::Union{IOStream,AbstractString,Mmap.AnonymousMmap}[, type::Type{Array{T,N}}, dims, offset]; grow::Bool=true, shared::Bool=true)
mmap(type::Type{Array{T,N}}, dims)

建立一個 Array,其值連結到檔案,使用記憶體對映。這提供了一個便利的方式來處理資料,資料太大而無法放入電腦的記憶體中。

類型是 Array{T,N},其元素為 T 的位元類型,維度為 N,用於決定陣列的位元組如何被詮釋。請注意,檔案必須儲存在二進位格式,且無法進行格式轉換(這是作業系統的限制,不是 Julia 的限制)。

dims 是指定陣列大小或長度的元組或單一 Integer

檔案透過串流引數傳遞,可以是開啟的 IOStream 或檔案名稱字串。當您初始化串流時,請使用 "r" 表示「唯讀」陣列,並使用 "w+" 建立用於將值寫入磁碟的新陣列。

如果未指定 type 參數,預設為 Vector{UInt8}

選擇性地,您可以指定一個偏移量(以位元組為單位),例如,如果您想要跳過檔案中的標頭。對於 IOStream,偏移量的預設值是目前的串流位置。

grow 關鍵字參數指定是否應該擴充磁碟檔案以容納請求的陣列大小(如果檔案總大小 < 請求的陣列大小)。需要寫入權限才能擴充檔案。

shared 關鍵字參數指定產生的 Array 和對其所做的變更是否會對映射相同檔案的其他處理程序可見。

例如,以下程式碼

# Create a file for mmapping
# (you could alternatively use mmap to do this step, too)
using Mmap
A = rand(1:20, 5, 30)
s = open("/tmp/mmap.bin", "w+")
# We'll write the dimensions of the array as the first two Ints in the file
write(s, size(A,1))
write(s, size(A,2))
# Now write the data
write(s, A)
close(s)

# Test by reading it back in
s = open("/tmp/mmap.bin")   # default is read-only
m = read(s, Int)
n = read(s, Int)
A2 = mmap(s, Matrix{Int}, (m,n))

建立一個 mn 列的 Matrix{Int},連結到與串流 s 關聯的檔案。

更具可攜性的檔案需要在標頭中編碼字元大小(32 位元或 64 位元)和位元序資訊。實際上,請考慮使用標準格式(例如 HDF5,可用於記憶體對應)編碼二進位資料。

mmap(io, BitArray, [dims, offset])

建立一個 BitArray,其值連結到一個檔案,使用記憶體對應;它有相同目的,以相同方式運作,並具有與 mmap 相同的參數,但位元組表示方式不同。

範例

julia> using Mmap

julia> io = open("mmap.bin", "w+");

julia> B = mmap(io, BitArray, (25,30000));

julia> B[3, 4000] = true;

julia> Mmap.sync!(B);

julia> close(io);

julia> io = open("mmap.bin", "r+");

julia> C = mmap(io, BitArray, (25,30000));

julia> C[3, 4000]
true

julia> C[2, 4000]
false

julia> close(io)

julia> rm("mmap.bin")

這會建立一個 25 行 30000 列的 BitArray,連結到與串流 io 關聯的檔案。

Mmap.sync!函數
Mmap.sync!(array)

強制記憶體對應的 ArrayBitArray 的記憶體中版本與磁碟版本之間的同步。