从流的开头删除空字节



我在dll中有一个类,它解析文件并返回表示FAT图像(或任何其他)的流

我的问题是,当存在任何其他映像时,该类在流的开头创建大约3702个(平均)空字节。

所以我必须先编辑流,然后将其保存到一个文件中。

我已经有了一个代码,但它运行缓慢。

[注意:fts是返回的FileStream。]

BufferedStream bfs = new BufferedStream(fts);
BinaryReader bbr = new BinaryReader(bfs);
byte[] all_bytes = bbr.ReadBytes((int)fts.Length);
List<byte> nls = new List<byte>();
int index = 0;
foreach (byte bbrs in all_bytes)
{
    if (bbrs == 0x00)
    {
        index++;
        nls.Add(bbrs);
    }
    else
    {
        break;
    }
}
byte[] nulls = new byte[nls.Count];
nulls = nls.ToArray();
//File.WriteAllBytes(outputDir + "Nulls.bin", nulls);
long siz = fts.Length - index;
byte[] file = new byte[siz];
bbr.BaseStream.Position = index;
file = bbr.ReadBytes((int)siz);
bbr.Close();
bfs.Close();
fts.Close();
bfs = null;
fts = null;
fts = new FileStream(outputDir + "Image.bin", FileMode.Create, FileAccess.Write);
bfs = new BufferedStream(fts);
bfs.Write(file, 0, (int)siz);
bfs.Close();
fts.Close();

现在,我的问题是:

如何比上面的代码更有效、更快地删除null?

您可以简单地循环您的流,直到找到第一个非空字节,然后使用array.copy.从那里复制数组,而不是将字节推到List上

我会考虑这样的东西(未经测试的代码):

int index = 0;
int currByte = 0;
while ((currByte = bbrs.ReadByte()) == 0x00)
{
    index++;
}
// now currByte and everything to the end of the stream are the bytes you want.

相关内容

  • 没有找到相关文章

最新更新