У меня есть большой файл (4 + концерты), позволяет, просто говорят, 4-байтовые плавания. Я хотел бы рассматривать его как Список, в том смысле, что я хотел бы смочь использовать карту, фильтр, foldl, и т.д. Однако вместо того, чтобы произвести новый список с выводом, я хотел бы записать вывод обратно в файл и таким образом только, чтобы иметь для загрузки небольшой части файла в памяти. Вы могли сказать меня что тип под названием MutableFileList
Кто-либо имеет, столкнулся с этой ситуацией прежде? Вместо того, чтобы изобрести велосипед я задавался вопросом если там Hackish путь к контакту с этим?
You should not treat it as a [Double]
or [Float]
in memory. What you could do is use one of the list-like packed array types, such as uvector/vector/... in company with mmapFile or readFile to pull chunks of the file in at a time, and process them. Or use a lazy packed array type, equivalent to lazy bytestrings.
This should be quite helpful to you. You can use readFile
and writeFile
for what you need to do, and everything is done lazily. It only keeps things in memory while they are still being used, so you can read, process, and write the file out without blowing up your computer.
Вы можете использовать mmap
, чтобы сопоставить файл с памятью и затем обработать его. Имеется модуль mmap , который обещает читать и записывать файлы mmap и может даже работать с лениво сопоставленными фрагментами файлов, но я не пробовал.
Интерфейс для запись в сопоставленный файл кажется довольно низким уровнем, поэтому вам придется создавать свои собственные абстракции или работать с Foreign.Ptr
и т.п.