我想读取几个 MB 的二进制文件的内容并将其存储到缓冲区中。这是我的函数原型(如果需要,我可以更改它):
procedure GET_BIN_CONTENT_FROM_PATH(PATH : in UNBOUNDED_STRING;
CONTENT : out UNBOUNDED_STRING);
到目前为止,我已经尝试了两种方法,都使用 Direct_IO 包。在第一种方法中,我是逐字符读取文件;它起作用了,但是速度非常慢。为了加快进程,我尝试按 MB 读取文件:
procedure GET_BIN_CONTENT_FROM_PATH (PATH : in UNBOUNDED_STRING;
CONTENT : out UNBOUNDED_STRING) is
BIN_SIZE_LIMIT : constant NATURAL := 1000000;
subtype FILE_STRING is STRING (1 .. BIN_SIZE_LIMIT);
package FILE_STRING_IO is new ADA.DIRECT_IO (FILE_STRING);
FILE : FILE_STRING_IO.FILE_TYPE;
BUFFER : FILE_STRING;
begin
FILE_STRING_IO.OPEN (FILE, MODE => FILE_STRING_IO.IN_FILE,
NAME => TO_STRING (C_BASE_DIR & PATH));
while not FILE_STRING_IO.END_OF_FILE (FILE) loop
FILE_STRING_IO.READ (FILE, ITEM => BUFFER);
APPEND (CONTENT, BUFFER);
end loop;
FILE_STRING_IO.CLOSE (FILE);
end GET_BIN_CONTENT_FROM_PATH;
不幸的是,如果文件中剩余的空间少于 1MB,则似乎不会发生 READ 操作。结果,大文件 (>1MB) 会被截断,而小文件根本不会被读取。在处理图像时尤其明显。
所以,我的问题是:快速完整地读取二进制文件的正确方法是什么?
提前致谢。