2017-01-31 7 views
1

У меня есть файл с байтами 1,5 ГБ в size {filebyte}. Я хочу, чтобы прочитать весь файл в случае один экземпляр, похожий на ДелфиСчитывание всего байта файла с использованием кэша межсистемных систем?

bytedata:=filebyte.readallbytes(filename); 

В результате того, что в одном случае вы будете иметь ByteArray с числом элементов является высокой (bytedata) -Low (bytedata) +1 , Есть ли эквивалентный код в кеше. Может ли файл размером 1,5 Гб быть сохранен в кеше. Я не хочу читать файл в блоках, так как операция по анализу данных требует, чтобы весь файл находился в памяти за один раз. Thanks

ответ

1

Вы можете прочитать из потока столько данных, сколько вам нужно. Проблема здесь, сколько вы можете сохранить в локальной переменной.

set fs=##class(%Stream.FileCharacter).%New() 
set fs.Filename="c:\test.txt" 
set length=fs.Size 
set data=fs.Read(length) \\ if size no more than 3.5Mb 

Локальная переменная размер limited от 3,641,144 байт или 32767 байт длинных строк diabled. И до 2012 года память за процесс была ограничена 48 мегабайтами. А в 2012 году он был изменен и можно установить до 2 terabytes per process, а в режиме реального времени программно только для текущего процесса со специальной переменной $zstorage.

+0

В вашем примере данные переменной сохраняют весь файл? Если да, то как бы получить доступ к подэлементам? –

+0

Да, у него будет весь контент, но что вы подразумеваете под подэлементами? – DAiMor

+0

Если файл состоит из 1000 байтов значений между (1-4), исключительными будут данные (1) = 2, данные (2) = 4 .... данные (999) = 1, данные (1000) = 4 или будут data = 2421123 ..... 14 где 14 - 999-й и 1000-й байты. Если последнее, то отдельные байты нельзя легко манипулировать, и нет никакого преимущества при чтении всего файла при чтении одного значения за раз. В моем примере delphi bytedata: = filebyte.readallbytes (filename) bytedata - это массив со значениями от 0 до длины-1 и bytedata [0] = 2, bytedata [2] = 4, bytedata [998] = 1 и bytedata [ 999] = 4. Есть ли аналогичная операция в кеше? –