Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET/Windows中二进制文件的最佳文件流搜索模式_.net_File Io_Filestream_Seek - Fatal编程技术网

.NET/Windows中二进制文件的最佳文件流搜索模式

.NET/Windows中二进制文件的最佳文件流搜索模式,.net,file-io,filestream,seek,.net,File Io,Filestream,Seek,我试图读取一个二进制文件,其中我感兴趣的数据在文件中分开。 哪种阅读模式更好?(假设初始流位置为字节0) 读取(计数=8192),寻道(偏移=20480,原点=当前),读取(计数=8192),寻道(偏移=12288,原点=当前) 读取(计数=8192),寻道(偏移=28672,原点=Begin),读取(计数=8192),寻道(偏移=49152,原点=Begin) 由于.NET Streams使我能够选择SeekOrigin,哪种搜索模式更好, 从开始的一个,请参见korigin.Begin,或继

我试图读取一个二进制文件,其中我感兴趣的数据在文件中分开。 哪种阅读模式更好?(假设初始流位置为字节0)

  • 读取(计数=8192),寻道(偏移=20480,原点=当前),读取(计数=8192),寻道(偏移=12288,原点=当前)
  • 读取(计数=8192),寻道(偏移=28672,原点=Begin),读取(计数=8192),寻道(偏移=49152,原点=Begin)
  • 由于.NET Streams使我能够选择SeekOrigin,哪种搜索模式更好, 从
    开始的一个,请参见korigin.Begin
    ,或继续从
    请参见原始码当前位置


    这有关系吗?操作系统不能自己计算并为我做决定吗?

    没关系。Current只是一个方便的选项,可以帮助您避免自己跟踪绝对位置。Windows已在内部执行此操作,因此将当前偏移转换为开始偏移不会有问题。这才是它真正需要的。你是如何计算操作系统会自动搜索到20480,然后再搜索到12288的还不清楚。不能,Windows没有记录大小的概念。一个文件只是一个字节流,没有强加给它的结构


    你寻找的确切顺序确实很重要。通过按顺序访问文件位置,程序运行最快。这是一个副作用,即数据如何写入磁盘盘中,然后从磁盘盘中读取,如果磁盘没有严重碎片,通常是按顺序读取。文件系统缓存利用了这一点,它将从同一磁盘磁道预读取数据,因为获取数据非常便宜,而且很可能会被使用。通过按顺序查找,可以最大限度地提高数据出现在缓存中的几率。您只需支付非常快速的内存到内存拷贝,无需等待磁盘。

    谢谢,我修改了我的问题