我使用下面的代码将任何文件转换为字节数组,然后在数组偏移搜索后将其转换为另一个字节数组。
如何使用加速读取文件到字节数组以使我的代码优化/更快,并在此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();
答案 0 :(得分:0)
你可能已经陷入了"我使用了字节和数组,因此我处于低级别,所以代码会很快"陷阱。 C#和.NET为其用户提供了有效的抽象来避免这种情况,在这种情况下可能是BinaryReader及其ReadString方法。
您的代码存在问题:
我看到的性能问题:
代码示例(我没有编译它,但它为您提供了干净,高效的文件读取的想法,请参阅我的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# Memory Mapped Files
编辑: 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);
}