當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Julia 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},其bits-type 元素為T,維度為N,確定如何解釋數組的字節。請注意,文件必須以二進製格式存儲,並且不能進行格式轉換(這是操作係統的限製,而不是 Julia)。

dims 是一個元組或單個 Integer ,指定數組的大小或長度。

該文件通過流參數傳遞,可以是打開的 IOStream 或文件名字符串。當您初始化流時,使用"r" 作為"read-only" 數組,並使用"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))

創建一個 m -by- n 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 關聯的文件。

相關用法


注:本文由純淨天空篩選整理自julialang.org 大神的英文原創作品 Mmap.mmap — Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。