File 使用intersystems';一次性读取整个文件字节;隐藏物

File 使用intersystems';一次性读取整个文件字节;隐藏物,file,caching,byte,intersystems,File,Caching,Byte,Intersystems,我在size{filebyte}中有一个1.5GB字节的文件。我想在一个类似于Delphi的实例中读取整个文件 bytedata:=filebyte.readallbytes(filename); 结果是,在一个实例中,您将拥有一个bytearray,元素数为high(bytedata)-low(bytedata)+1。缓存中是否有等效代码。大小为1.5G的文件能否保存在缓存中的内存中。 我不想以块的形式读取文件,因为分析数据的操作需要一次将整个文件存储在内存中。 谢谢您可以根据需要从流中读取

我在
size{filebyte}
中有一个1.5GB字节的文件。我想在一个类似于Delphi的实例中读取整个文件

bytedata:=filebyte.readallbytes(filename);
结果是,在一个实例中,您将拥有一个bytearray,元素数为high(bytedata)-low(bytedata)+1。缓存中是否有等效代码。大小为1.5G的文件能否保存在缓存中的内存中。 我不想以块的形式读取文件,因为分析数据的操作需要一次将整个文件存储在内存中。
谢谢

您可以根据需要从流中读取任意多的数据。问题是,在局部变量中可以存储多少

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

本地变量大小为3641144字节或32767字节的长字符串。到2012年,每个进程的内存限制为48MB。在2012.2中,它被更改了,并且可以通过编程方式实时设置为具有特殊变量的当前进程。

在您的示例中,变量数据是否包含整个文件?如果是这样,如何访问子元素?是的,它将包含整个内容,但子元素是什么意思?如果文件包含1000个字节的值,这些值介于(1-4)之间,则数据(1)=2,数据(2)=4…数据(999)=1,数据(1000)=4或数据=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。缓存中是否有类似的操作?数据,它只是一个字符串,您可以使用$extract函数获取任何符号或下标,有关详细信息,请参阅文档-长度为1.5GB的字符串将超过最大字符串长度,因此$extract不适用。