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.mmap(io::Union{IOStream,AbstractString,Mmap.AnonymousMmap}
[, type::Type{Array{T,N}}, dims, offset];
grow::Bool=true,
shared::Bool=true)
Mmap.mmap(type::Type{Array{T,N}}, dims)
メモリマップを使って、値がファイルとリンクした配列を作成します。大きすぎてコンピューターのメモリに収まらないデータを簡単に処理する手段を提供します。
作成される配列の型は Array{T,N}
です。要素型を表すビット型 T
と次元 N
が配列中のバイトを解釈する方法を決定します。ファイルはバイナリフォーマットで格納されている必要があり、フォーマットの変換は利用できないことに注意してください (これは Julia ではなくオペレーティングシステムの制限です)。
dims
はタプルもしくは単一の Integer
であり、配列のサイズ (長さ) を指定します。
マップされるファイルは引数 io
を通して指定されます。io
には開かれた IOStream
またはファイル名を表す文字列を渡すことができます。mmap
に渡すストリームを初期化するとき、読み込み専用の配列に対するストリームでは "r"
を使い、値をディスクに書き込むのに使う新しい配列に対するストリームでは "w+"
を使ってください。
引数 type
が与えられないと Vector{UInt8}
がデフォルトで使われます。
オフセットを offset
で指定することもできます。例えばファイルのヘッダーを飛ばす場合などに利用します。offset
のデフォルト値は IOStream
の現在位置です。
キーワード引数 grow
は、要求されたサイズの配列を格納できるようディスク上のファイルを大きくするかどうかを指定します。この処理が行われるのは要求された配列サイズがファイルサイズよりも小さいときだけであり、ファイルを大きくするには書き込み権限が必要です。
キーワード引数 shared
は、同じファイルをマップする他のプロセスから返り値の Array
およびそれに対する書き込みが見えるかどうかを指定します。
例として次のコードを考えます:
# mmap に使うファイルを作成する (mmap でもよい)。
using Mmap
A = rand(1:20, 5, 30)
s = open("/tmp/mmap.bin", "w+")
# 配列の次元を二つの Int として最初に書き込む。
write(s, size(A,1))
write(s, size(A,2))
# データを書き込む。
write(s, A)
close(s)
# テストとして同じデータを読み込む。
s = open("/tmp/mmap.bin") # デフォルトは読み込み専用
m = read(s, Int)
n = read(s, Int)
A2 = Mmap.mmap(s, Matrix{Int}, (m,n))
このコードはストリーム s
に関連付いたファイルにリンクされた m×n
の Matrix{Int}
を作成します。
ファイルをさらにポータブルにするには、ワードサイズ (32 ビットまたは 64 ビット) とエンディアンの情報をヘッダーに含めることになるでしょう。実際のコードでバイナリデータをエンコードするときは、HDF5 のような標準フォーマットの利用を考えてください (HDF5 フォーマットはメモリマップしながら利用できます)。
Mmap.mmap(io, BitArray, [dims, offset])
メモリマップを使って、値がファイルにリンクされた BitArray
を作成します。mmap
と同じ目的、同じ動作、同じ引数を持ちますが、バイト表現が異なります。
例
julia> using Mmap
julia> io = open("mmap.bin", "w+");
julia> B = Mmap.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.mmap(io, BitArray, (25,30000));
julia> C[3, 4000]
true
julia> C[2, 4000]
false
julia> close(io)
julia> rm("mmap.bin")
このコードはストリーム io
に関連付いたファイルにリンクされた 25×300000
の BitArray
を作成します。