我正在通过二进制阅读器将文件作为流读取。我读了很多字节,但是当检查基本流位置时,它比它应该的长得多。
代码示例:
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个字节时,流如何到达此位置?
答案 0 :(得分:1)
对于使用DevExpress Coderush且已打开Debug Visualizer的任何人,这将自动检查使用流的代码的结果,例如BinaryReader,当执行实际的行时,该结果会导致流在错误的位置。在我的情况下(也是Xamarin.Android应用程序),我正在使用二进制读取器读取流中的所有字节,并且当我尝试对代码进行调试时,自动检查会移动位置并导致“无法读取”直到我在阅读序列中走得更远时为止。
对于Coderush用户而言,唯一的解决方法是关闭Debug Visualizer或确保在启用时不中断和逐步执行使用流的代码行。