Memory-mapped I/O

Dosya mmap (bellek eşleme) için düşük seviyeli modül.

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

Dosya ile ilişkilendirilmemiş sıfırlanmış mmapped bellek oluşturmak için bir IO benzeri nesne oluşturur, mmap içinde kullanılmak üzere. Paylaşılan bellek dizileri oluşturmak için SharedArray tarafından kullanılır.

Örnekler

julia> using Mmap

julia> anon = Mmap.Anonymous();

julia> isreadable(anon)
true

julia> iswritable(anon)
true

julia> isopen(anon)
true
source
Mmap.mmapFunction
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)

Bir dosyaya bağlı değerleri olan bir Array oluşturun, bellek eşlemesi kullanarak. Bu, bilgisayarın belleğine sığmayacak kadar büyük verilerle çalışmanın pratik bir yolunu sağlar.

Tür, T'nin bit türü elemanına ve dizinin N'ye sahip bir Array{T,N}'dir; bu, dizinin baytlarının nasıl yorumlanacağını belirler. Dosyanın ikili formatta saklanması gerektiğini ve format dönüşümlerinin mümkün olmadığını unutmayın (bu, işletim sistemlerinin bir sınırlamasıdır, Julia'nın değil).

dims, dizinin boyutunu veya uzunluğunu belirten bir demet veya tek bir Integer olarak belirtilir.

Dosya, ya açık bir IOStream ya da dosya adı dizesi olarak akış argümanı aracılığıyla geçilir. Akışı başlatırken, "salt okunur" bir dizi için "r" ve diske değer yazmak için yeni bir dizi oluşturmak için "w+" kullanın.

Eğer type argümanı belirtilmemişse, varsayılan Vector{UInt8}'dir.

Örneğin, dosyadaki bir başlığı atlamak istiyorsanız, isteğe bağlı olarak bir offset (bayt cinsinden) belirtebilirsiniz. Offset için varsayılan değer, bir IOStream için mevcut akış konumudur.

grow anahtar kelime argümanı, istenen dizi boyutunu karşılamak için disk dosyasının büyütülüp büyütülmeyeceğini belirtir (eğer toplam dosya boyutu < istenen dizi boyutu). Dosyayı büyütmek için yazma ayrıcalıkları gereklidir.

shared anahtar kelime argümanı, elde edilen Array ve ona yapılan değişikliklerin, aynı dosyayı eşleyen diğer süreçler tarafından görünür olup olmayacağını belirtir.

Örneğin, aşağıdaki kod

# mmapping için bir dosya oluştur
# (bu adımı yapmak için mmap kullanabilirsiniz)
using Mmap
A = rand(1:20, 5, 30)
s = open("/tmp/mmap.bin", "w+")
# Dizinin boyutlarını dosyadaki ilk iki Int olarak yazacağız
write(s, size(A,1))
write(s, size(A,2))
# Şimdi verileri yaz
write(s, A)
close(s)

# Geri okuyarak test et
s = open("/tmp/mmap.bin")   # varsayılan salt okunur
m = read(s, Int)
n = read(s, Int)
A2 = mmap(s, Matrix{Int}, (m,n))

m-çarpı-n Matrix{Int} oluşturur ve bu, s akışıyla ilişkili dosyaya bağlıdır.

Daha taşınabilir bir dosya, kelime boyutunu – 32 bit veya 64 bit – ve sonlandırma bilgilerini başlıkta kodlamalıdır. Pratikte, ikili verileri HDF5 gibi standart formatlar kullanarak kodlamayı düşünün (bu, bellek eşlemesi ile kullanılabilir).

source
mmap(io, BitArray, [dims, offset])

Bir dosyaya bağlı değerleri olan bir BitArray oluşturur, bellek eşlemesi kullanarak; aynı amaca sahiptir, aynı şekilde çalışır ve mmap ile aynı argümanlara sahiptir, ancak bayt temsili farklıdır.

Örnekler

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")

Bu, io akışıyla ilişkili dosyaya bağlı 25'e 30000 boyutunda bir BitArray oluşturur.

source
Mmap.sync!Function
Mmap.sync!(array)

Bellek haritalı bir Array veya BitArray için bellek içindeki sürüm ile disk üzerindeki sürüm arasında senkronizasyonu zorlar.

source