我通过二进制读取器将文件作为流读取。我读了很多字节,但是当检查基本流位置时,它比它应该更长。
代码示例:
public void MainLoader()
{
FileStream input = System.IO.File.Open(path, System.IO.FileMode.Open);
BinaryReader binaryReader = new BinaryReader(input, Encoding.GetEncoding(1252));
byte[] bytes = binaryReader.ReadBytes(256); // 256 bytes
binaryReader.ReadInt32(); //4 bytes
binaryReader.ReadInt32(); //4 bytes
binaryReader.ReadInt16(); //2 bytes
binaryReader.ReadInt32(); //4 bytes
binaryReader.ReadInt16(); //2 bytes
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadBoolean(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadInt16(); //2 bytes
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadBoolean(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadInt16(); //2 bytes
binaryReader.ReadInt16(); //2 bytes
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
binaryReader.ReadByte(); // 1 byte
// should return 292
var position = binaryReader.BaseStream.Position
binaryReader.Close();
}
当通过winform应用程序运行它时,它按预期工作,并且postion
是292.当通过Xamarin.Android应用程序运行时,它会混乱并返回4096。
我尝试过使用默认编码和UTF8编码而没有任何变化。我开始怀疑它是否属于某些CultureInfo
设置
当代码物理读取292个字节时,流如何到达此位置?
对于使用DevExpress Coderush且启用了Debug Visualizer的任何人,这会自动检查使用流的代码的结果,例如BinaryReader,然后在执行实际行时导致流处于错误的位置。在我的情况下(也是一个Xamarin.Android应用程序)我正在使用二进制阅读器从我的流中读取所有字节,并且当我尝试围绕代码进行调试时,自动检查正在移动位置并导致“无法读取超出流的末尾“当我在读取序列中进一步的时候。
对于Coderush用户来说,解决此问题的唯一方法是关闭Debug Visualizer,或者确保在启用时不会中断和步骤使用流的代码行。