内存映射I/O
Mmap(文件的内存映射)的低级别模块。
# *`Mmap。匿名`*-类型
Mmap.Anonymous(name::AbstractString="", readonly::Bool=false, create::Bool=true)
创建一个 伊俄-类似于创建零出mmapped-内存的对象,该内存不与文件绑定,以便在 mmap,mmap. 使用的 共享阵列 用于创建共享内存阵列。
*例子*
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(type::Type{Array{T,N}}, dims)
创建一个 阵列 其值使用内存映射链接到文件。 这提供了一个方便的方法来处理太大的数据,以适应计算机的内存。
类型是一个 阵列{T,N} 与位类型的元素 T 和尺寸 N 这决定了如何解释数组的字节。 请注意,文件必须以二进制格式存储,并且不可能进行格式转换(这是操作系统的限制,而不是Julia)。
暗淡无光 是元组还是单 整数指定数组的大小或长度。
该文件通过流参数传递,无论是作为一个开放的 [美梦]或文件名字符串。 初始化流时,使用 "r" 对于"只读"数组,以及 "w+" 创建用于将值写入磁盘的新数组。
如果没有 类型 参数指定,默认为 向量{UInt8}.
例如,如果要跳过文件中的标头,也可以指定偏移量(以字节为单位)。 偏移量的默认值是 [美]梦.
该 成长 关键字参数指定磁盘文件是否应增长以适应请求的数组大小(如果总文件大小为<请求的数组大小)。 需要写入权限才能增长文件。
该 共享 关键字参数指定结果是否 阵列 对它所做的更改将对映射同一文件的其他进程可见。
例如,下面的代码
# 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-由-n 矩阵{Int},链接到与stream关联的文件 s.
一个更便携的文件将需要编码字大小-32位或64位-和标题中的endianness信息。 在实践中,考虑使用HDF5(可与内存映射一起使用)等标准格式对二进制数据进行编码。
mmap(io, BitArray, [dims, offset])
*例子*
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 比特阵列,链接到与stream关联的文件 伊俄.