我正在处理大文件,直接写入磁盘很慢.因为文件很大,我无法在TMemoryStream中加载它.
TFileStream没有缓冲,所以我想知道是否有一个可以提供缓冲流的自定义库,或者我是否应该只依赖OS提供的缓冲.OS缓冲是否可靠?我的意思是如果缓存已满,可以从缓存中刷新旧文件(我的)以便为新文件腾出空间.
我的文件在GB范围内.它包含数百万条记录.不幸的是,记录不是固定大小.所以,我必须做数百万的读数(4到500字节之间).阅读(和写作)是顺序的.我不会上下跳进文件(我认为这是缓冲的理想选择).
最后,我必须将这样的文件写回磁盘(再次写入数百万的小写).
对David Heffernan赞不绝口!
David提供了一段很棒的代码,提供缓冲磁盘访问.
人们你必须拥有他的BufferedFileStream!这是黄金.并且不要忘记upvote.
谢谢大卫.
您如何看待在给定字节序列开始的System.Stream中找到位置的最佳方法是什么(第一次出现):
public static long FindPosition(Stream stream, byte[] byteSequence)
{
long position = -1;
/// ???
return position;
}
Run Code Online (Sandbox Code Playgroud)
PS最简单但最快速的解决方案是优先考虑的.:)
我正在以二进制形式将文件加载到一个数组中,这似乎需要一段时间才有更好更快更有效的方法来执行此操作.我正在使用类似的方法写回文件.
procedure openfile(fname:string);
var
myfile: file;
filesizevalue,i:integer;
begin
assignfile(myfile,fname);
filesizevalue:=GetFileSize(fname); //my method
SetLength(dataarray, filesizevalue);
i:=0;
Reset(myFile, 1);
while not Eof(myFile) do
begin
BlockRead(myfile,dataarray[i], 1);
i:=i+1;
end;
CloseFile(myfile);
end;
Run Code Online (Sandbox Code Playgroud)