bir dosyadan ham bayt aralığı yapmak için en kolay yolu sadece bunu belleğe tamam okumaktır bir dosya http://dlang.org/phobos/std_mmfile.html ve bir dizi almak için opSlice kullanın. Bir dizi olduğu için, tam kapsamlı özelliklere sahip olursunuz, ancak işletim sistemi tarafından eşlenen bellek olduğundan, dosyaya dokunduğunuzda tembel okuma elde edersiniz. Basit InputRange için
, Phobos içinde
LockingTextReader
(belgesiz) vardır, ya sen
byChunk
hatta
fgetc
, C fonksiyonu üzerinden bir kendini inşa edecek.
fgetc
yazmak için en kolay olacaktır: Aslında o kadar test etmedim
struct FileByByte {
ubyte front;
void popFront() { front = cast(ubyte) fgetc(fp); }
bool empty() { return feof(fp); }
FILE* fp;
this(FILE* fp) { this.fp = fp; popFront(); /* prime it */ }
}
ama o iş olur eminim. (BTW dosya açma ve kapatma bundan ayrıdır çünkü aralıklar yalnızca yönetilen kaplara değil, yalnızca veriye bakması gerekir. Bu aralığı bir işleve dönüştürdüğünüz için dosyanın kapatılmasını istemezsiniz.)
olsa da değil bir ileri veya rasgele erişim aralığıdır. Çok fazla kodlama kodu olmadan akışları yapmak çok daha zordur ve bence yazmayı denemek bir hata olur - genellikle, aralıklar ucuz olmalı, altta yatan kapsayıcıların doğal olarak desteklemediği özelliklere sahip olmamalıdır.
DÜZENLEME: Diğer yanıtın arabelleğe alınmayan bir yolu var! https://stackoverflow.com/a/30278933/1457000 Bu harika.
Keşke bunu beş kez yapabilirim, bu çok yararlı ve ben bunu bilmiyordum! –
@ AdamD.Ruppe, bu haftanın D'de Bu Hafta için iyi bir konuya benziyor! –
Bunun bir geleceğe sarılmış olduğunu düşünün, ve veri yüklendiğinde sadece bir etkinlik alıyorsunuz ... İyi şeyler. – DejanLekic