【问题标题】:Stream reader.Read number of character流阅读器。读取字符数
【发布时间】:2015-09-19 07:46:49
【问题描述】:

是否有任何流阅读器类可以从stringbytebyte[] 中读取char 的数量?

例如读取字符串:

string chunk = streamReader.ReadChars(5); // Read next 5 chars

或读取字节

byte[] bytes = streamReader.ReadBytes(5); // Read next 5 bytes

请注意,此方法的返回类型或类的名称无关紧要。我只是想知道是否有类似的东西我可以使用它。

我有来自 midi 文件的byte[]。我想用 C# 阅读这个 midi 文件。但我需要能够读取字节数。或字符(如果我将其转换为十六进制)。更轻松地验证 midi 并从中读取数据。

【问题讨论】:

  • 您可以使用StreamReader.Read - “从当前流中读取指定最大字符到缓冲区,从指定索引开始。”
  • 您可能正在寻找BinaryReader。从TextReader 派生的类通常是面向文本的...请注意,所有这些都需要Stream 作为源——这就是MemoryStream 的用途。
  • @AlexeiLevenkov 谢谢。您的评论实际上是一个答案。我需要的是 MemoryStream。
  • @M.kazemAkhgary - 好的 - 考虑找到好的副本......或者如果你愿意,可以将我的答案转换为评论。我虽然 similar question 询问特定编码可以重复,但它已经在问题中显示了答案 - 所以不太公平。
  • 是的。我得到了它。我怎么不需要流阅读器。因为即使对于十六进制我也需要字节,所以我也需要字节并且 memorystream 读取字节。 @AlexeiLevenkov

标签: c# stream bytearray reader


【解决方案1】:

感谢 cmets。我不知道读取方法存在重载。我可以通过 FileStream 实现这一点。

        using (FileStream fileStream = new FileStream(path, FileMode.Open))
        {
            byte[] chunk = new byte[4];
            fileStream.Read(chunk, 0, 4);
            string hexLetters = BitConverter.ToString(chunk); // 4 Hex Letters that i need!
        }

【讨论】:

  • 谢谢!文件流做得很好! @AlexeiLevenkov
【解决方案2】:

您可以通过执行以下操作来实现此目的,但我不确定这是否适用于您的问题。

 StreamReader sr = new StreamReader(stream);
 StringBuilder S = new StringBuilder();
 while(true)
 {
 S = S.Append(sr.ReadLine());
 if (sr.EndOfStream  == true)
      {
         break;
      }
 }

一旦你对“S”有了价值,你就可以考虑它的子字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多