Czytam plik gzipped korzystając iostreams doładowania: Poniższy działa dobrze:Czy można przyspieszyć czytanie i kompresowanie gzipowanych plików w locie?
namespace io = boost::iostreams;
io::filtering_istream in;
in.push(boost::iostreams::basic_gzip_decompressor<>());
in.push(io::file_source("test.gz"));
stringstream ss;
copy(in, ss);
Jednak nie chcę podjąć trafienie pamięci czytania całego pliku gzip do pamięci. Chcę móc czytać plik przyrostowo.
Na przykład, jeśli mam struktury danych X, które inicjuje się od istream,
X x;
x.read(in);
zawiedzie. Prawdopodobnie dzieje się tak dlatego, że jeśli będziemy robić częściowe strumienie, będziemy musieli przywrócić znaki w strumieniu . Jakieś pomysły, czy boost iostreams obsługuje to?
Byłoby robi operacji takich jak wywołanie 'getline()' 'następnie sprężające()' to poprzez pracę pętli dla Ciebie? – user99545
@ user99545: Nie: ponieważ X tworzy się z danych binarnych. – ATemp
Nie rozumiem, dlaczego nie. Użyłem boost iostreams do odczytu i zapisu strumieni skompresowanych zlib w ten sposób. – Ferruccio