内存映射 I/O

mmap(文件内存映射)的低级模块。

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

创建一个IO类对象,用于创建未绑定到文件的零填充内存映射内存,以供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))

创建一个mnMatrix{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的内存中版本与磁盘上的版本同步。