相关疑难解决方法(0)

缓冲文件(用于更快的磁盘访问)

我正在处理大文件,直接写入磁盘很慢.因为文件很大,我无法在TMemoryStream中加载它.

TFileStream没有缓冲,所以我想知道是否有一个可以提供缓冲流的自定义库,或者我是否应该只依赖OS提供的缓冲.OS缓冲是否可靠?我的意思是如果缓存已满,可以从缓存中刷新旧文件(我的)以便为新文件腾出空间.

我的文件在GB范围内.它包含数百万条记录.不幸的是,记录不是固定大小.所以,我必须做数百万的读数(4到500字节之间).阅读(和写作)是顺序的.我不会上下跳进文件(我认为这是缓冲的理想选择).

最后,我必须将这样的文件写回磁盘(再次写入数百万的小写).


对David Heffernan赞不绝口!
David提供了一段很棒的代码,提供缓冲磁盘访问.
人们你必须拥有他的BufferedFileStream!这是黄金.并且不要忘记upvote.

谢谢大卫.

delphi io buffer file stream

43
推荐指数
4
解决办法
1万
查看次数

在给定字节序列开始的流中查找位置的最佳方法

您如何看待在给定字节序列开始的System.Stream中找到位置的最佳方法是什么(第一次出现):

public static long FindPosition(Stream stream, byte[] byteSequence)
{
    long position = -1;

    /// ???
    return position;
}
Run Code Online (Sandbox Code Playgroud)

PS最简单但最快速的解决方案是优先考虑的.:)

c# algorithm bytearray stream find

11
推荐指数
2
解决办法
1万
查看次数

在delphi中从文件快速读/写

我正在以二进制形式将文件加载到一个数组中,这似乎需要一段时间才有更好更快更有效的方法来执行此操作.我正在使用类似的方法写回文件.

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)

delphi binary file

8
推荐指数
3
解决办法
3万
查看次数

标签 统计

delphi ×2

file ×2

stream ×2

algorithm ×1

binary ×1

buffer ×1

bytearray ×1

c# ×1

find ×1

io ×1