我正在开发一个模拟BinaryReader.Readbytes()
方法的程序来比较我从二进制文件中提取的数据。为了测试它是否正常工作,我正在编写一个主要执行ReadBytes()
方法的方法。它意味着从数组中读取指定数量的值,然后从它最后输出值的相同索引开始,并获得指定的下几个值。
我目前拥有获取指定数量值的代码。但是,当我下次调用该方法时,它会再次从数组的开头开始。我不知道哪里出错了。如果你能帮助我,那就太好了!谢谢。
以下是代码:
public class TestInformationHeaderData
{
private byte[] _data;
int _index = 0;
public TestInformationHeaderData(byte[] data)
{
_data = data;
}
public byte[] getBytes(int count)
{
_index = count;
var returnArray = new byte[count];
for (int i = 0; i < count; i++)
{
returnArray[i] = _data[i];
count++;
}
_index = count;
return returnArray;
}
}
TestInformationHeaderData test = new TestInformationHeaderData(b);
byte[] byteArray = test.getBytes(3);
byte[] newByteArray = test.getBytes(1);
//Here's where it starts reading from the first value again.
答案 0 :(得分:0)
你没有在调用之间正确存储状态,你需要实际读取索引的值,否则存储它是没有用的。如下所示(未经测试):
public class TestInformationHeaderData
{
private byte[] _data;
int _index = 0;
public TestInformationHeaderData(byte[] data)
{
_data = data;
}
public byte[] getBytes(int count)
{
var returnArray = new byte[count];
for (int i = 0; i < count; i++)
{
returnArray[i] = _data[i + _index];
}
_index += count;
return returnArray;
}
}
TestInformationHeaderData test = new TestInformationHeaderData(b);
byte[] byteArray = test.getBytes(3);
// _index now 3
byte[] newByteArray = test.getBytes(1);
// _index now 4
为了使代码更完整,您还应该添加边界检查。