BinaryReader返回错误的位置

问题描述 投票:0回答:1

我通过二进制读取器将文件作为流读取。我读了很多字节,但是当检查基本流位置时,它比它应该更长。

代码示例:

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个字节时,流如何到达此位置?

c# android xamarin xamarin.android
1个回答
1
投票

对于使用DevExpress Coderush且启用了Debug Visualizer的任何人,这会自动检查使用流的代码的结果,例如BinaryReader,然后在执行实际行时导致流处于错误的位置。在我的情况下(也是一个Xamarin.Android应用程序)我正在使用二进制阅读器从我的流中读取所有字节,并且当我尝试围绕代码进行调试时,自动检查正在移动位置并导致“无法读取超出流的末尾“当我在读取序列中进一步的时候。

对于Coderush用户来说,解决此问题的唯一方法是关闭Debug Visualizer,或者确保在启用时不会中断和步骤使用流的代码行。

© www.soinside.com 2019 - 2024. All rights reserved.