当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。