【问题标题】:BinaryReader and while statement operatorsBinaryReader 和 while 语句运算符
【发布时间】:2014-10-21 20:50:58
【问题描述】:

这不是我的代码。我应该弄清楚发生了什么。 while 语句的行是我感到困惑的地方。它试图说的只是读到文件结束。我不明白它将如何评估为某个整数进行比较。

        using (FileStream fs = File.Open(pathToPK, FileMode.Open))
        {
            BinaryReader br = new BinaryReader(fs);

            using (MemoryStream ms = new MemoryStream())
            {
                byte[] buffer = new byte[1024];

                int read = 0;

                while ((read = br.Read(buffer, 0, 1024)) > 0) //don't understand this line
                {
                    ms.Write(buffer, 0, read);
                }

                sk = new byte[ms.ToArray().Length]; //sk is a byte[]

                ms.ToArray().CopyTo(sk, 0);
            }
        }

【问题讨论】:

  • 想想我几乎没看懂全部代码。
  • 您是否阅读过 BinaryReader.Read 方法的文档?
  • 我的答案是正确的..
  • @Steve 我做了,但直到现在我才看到返回部分。

标签: c# binaryreader binary-serialization


【解决方案1】:

基本上它在 FileMode.Open 中打开一个文件流到一个指定的文件(pathToPK)。使用所述文件流,它会打开一个二进制读取器来读取原始字节并创建一个新的 MemoryStream 来复制二进制内容。

然后,它继续以 1024 字节的块读取整个文件。 BinaryReader 的 Read 方法返回读取的字节数,因此您可以将条件读取为“读取器读取至少 1 个字节(并尝试读取多达 1024 个字节)”。

最后它会创建一个新的字节[] 到整个文件的长度,基于它被复制到的内存流,并实际将整个内容复制到 sk

【讨论】:

  • 是的,我现在感觉很愚蠢,因为出于某种原因,我将大于号读作小于号
【解决方案2】:

它以一种非常复杂的方式在做sk = File.ReadAllBytes(pathToPK);

【讨论】:

  • 你是说我基本上可以用你的代码替换这段代码。
  • 我可能遗漏了一些东西,但这就是我的样子。您可以通过执行sk1.SequenceEqual(sk2); 来测试它(如果它们相同,则为true)并以旧方式填充sk1 并以这种方式填充sk2
猜你喜欢
  • 1970-01-01
  • 2015-04-03
  • 2013-12-28
  • 2021-12-04
  • 2013-07-30
  • 2011-07-10
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多