【问题标题】:Binary reader peek byte in C#C# 中的二进制读取器窥视字节
【发布时间】:2014-03-27 14:12:16
【问题描述】:

我希望查看使用二进制阅读器传入的二进制数据的一个字节。仅当它是 UTF-8 时,使用 PeekChar 才能正常工作。否则,我会收到错误“输出字符缓冲区太小,无法包含解码字符,编码 'Unicode (UTF-8)' 回退”。

有没有办法让二进制阅读器不考虑编码而偷看一个字节?

Stream stream = new MemoryStream(buffer);
BinaryReader reader = new BinaryReader(stream);
type = (uint)reader.PeekChar(); // Throws error I mentioned for a particular case

【问题讨论】:

  • 数据是文本吗? UTF8 可以有多字节字符。您是在寻找下一个字符还是下一个字节?
  • @ScottChamberlain No. 它的二进制数据。我正在寻找下一个字节。

标签: c# binaryreader peek


【解决方案1】:

BinaryReader 不能偷看一个字节,就这么简单。但是,就您而言,这并不重要。由于您在BinaryReader 下有一个MemoryStream,因此您可以安全地执行ReadByte 并将Position 向后移动一个字节。

【讨论】:

  • 我正在寻找内存流的 Peek 方法。我不知道我可以改变位置。谢谢。
  • 我正在寻找一种在非终结网络流上执行此操作的方法,有没有办法使用缓冲历史记录的流层来执行此操作?
  • @Droa 我会避免尝试,网络流已经足够复杂了。为什么不处理应用程序级别的窥视呢?但是,如果您真的想要,制作自己的流来缓冲底层流上的单个字节非常容易。只要确保您正确处理关闭流:)
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多