如果您真的想快速读取二进制文件,请让 Windows 担心缓冲 ;-) 使用Memory Mapped Files。使用它,您可以简单地将文件映射到一个内存位置,就像它是一个数组一样读取。
您的功能将变为:
procedure openfile(fname:string);
var
InputFile: TMappedFile;
begin
InputFile := TMappedFile.Create;
try
InputFile.MapFile(fname);
SetLength(dataarray, InputFile.Size);
Move(PByteArray(InputFile.Content)[0], Result[0], InputFile.Size);
finally
InputFile.Free;
end;
end;
但我建议不要使用全局变量dataarray
,而是将其作为 var 传递给参数,或者使用返回结果数组的函数。
procedure ReadBytesFromFile(const AFileName : String; var ADestination : TByteArray);
var
InputFile : TMappedFile;
begin
InputFile := TMappedFile.Create;
try
InputFile.MapFile(AFileName);
SetLength(ADestination, InputFile.Size);
Move(PByteArray(InputFile.Content)[0], ADestination[0], InputFile.Size);
finally
InputFile.Free;
end;
end;
TMappedFile 来自我的文章Fast reading of files using Memory Mapping,本文还包含一个示例,说明如何将其用于更“高级”的二进制文件。