加速读取文件到多个字节数组,并通过if语句复制偏移量

本文关键字:if 语句 偏移量 复制 数组 文件 读取 字节数 字节 加速 | 更新日期: 2023-09-27 18:05:10

我使用下面的代码将任何文件转换为字节数组,然后在数组偏移量中搜索后将其转换为另一个字节数组。

我如何使用加速读取文件到字节数组,使我的代码优化/更快,在这个while循环。我如何创建多个字节数组,如果我在什么偏移包含搜索??

例如:
我打开的文件完全加载到一个内存使用缓冲区是好的,当我加载一个大文件+50MB ??或者我可以搜索其他的

另一件事:帮助在while循环中创建if语句来搜索ex的偏移量100是否包含字节"00110011"如果是>>将偏移量复制到其他字节数组下面是代码

 System.IO.FileStream fs = new System.IO.FileStream(openFileDialog1.FileName, System.IO.FileMode.Open);
  byte[] buf = new byte[102400];
  int bytesRead;
        // Read the file 100Kb at a time.
        do
        {
        bytesRead = fs.Read(buf, 0, 102400);

        string s = string.Join(" ", buf.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')));
            MessageBox.Show("OK", "OK", MessageBoxButtons.OK);

           textBox1.Text = textBox1.Text + s;
        }
        while (bytesRead == 102400);
        fs.Close();

加速读取文件到多个字节数组,并通过if语句复制偏移量

您可能已经陷入"我使用字节和数组,所以我是低级别的,所以代码将会很快"的陷阱。c#和。net为用户提供了有效的抽象来避免这种情况,在本例中可能是一个BinaryReader和它的ReadString方法。

你的代码有问题:

  • 你不读取整个文件(你停在最后一个缓冲区的1048576字节被填满,下一个x字节不会被读取)
  • 你读一个字节数组然后转换成字符串?你应该使用。net框架IO API (Streams)并直接分配字符串
  • 你应该在using语句中封装文件上的IO操作,以避免资源泄漏(在文件句柄上)。

性能问题:

  • 为空分配大字节数组
  • 转换可以避免的调用

代码示例(我没有编译它,但它给你一个干净和有效的文件读取的想法,看到我的MSDN链接更多的例子)

string myText = string.Empty;
using(var reader = new BinaryReader(openFileDialog1.FileName))
{
  string line;
  while((line = reader.ReadString()) != null)
  {
    myText += YouLogic(line); // use a StringBuilder if the number of string concatenations is high
  }
}
作为旁注,对于非常大的文件,请考虑使用c#内存映射文件

编辑:BinaryReader包含所有所需数据类型的Read方法,它应该允许您有效地读取任何类型的二进制文件。

关于你的附加问题,请查看MSDN中的ReadBytes:

//Offset 100 bytes:
var offsetRead = reader.ReadBytes(100);
// read one byte
byte readByte = reader.ReadByte();
// compare it to the expected value
if(readByte == myByte)
{
   // copy the offset read
   var myArray = new byte[100];
   Array.Copy(offsetRead, myArray, offsetRead.Length);
   DoSomething(myArray);
}