【发布时间】:2014-10-26 22:44:21
【问题描述】:
我有一个方法可以从IEnumerable<byte> 读取可变数量的字节,并在找到某个标志时停止。
是否有一种简单有效的方法来调整BinaryReader 并使该方法只读取必要数量的字节?
附:如果别无选择,也可以是另一种类型的StreamReader。
【问题讨论】:
标签: c# .net binary ienumerable binaryreader
我有一个方法可以从IEnumerable<byte> 读取可变数量的字节,并在找到某个标志时停止。
是否有一种简单有效的方法来调整BinaryReader 并使该方法只读取必要数量的字节?
附:如果别无选择,也可以是另一种类型的StreamReader。
【问题讨论】:
标签: c# .net binary ienumerable binaryreader
如果我理解正确,您需要将BinaryReader 传递给期望IEnumerable<byte> 的方法。如果是这样,请尝试使用此类:
public class MyBinaryReader : BinaryReader, IEnumerable<byte>
{
public MyBinaryReader(Stream input)
: base(input)
{
}
public MyBinaryReader(Stream input, Encoding encoding)
: base(input, encoding)
{
}
public IEnumerator<byte> GetEnumerator()
{
while (BaseStream.Position < BaseStream.Length)
yield return ReadByte();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
使用示例:
private static void ReadFew(IEnumerable<byte> list)
{
var iter = list.GetEnumerator();
while (iter.MoveNext() && iter.Current != 3)
{
}
}
using (MemoryStream memStream = new MemoryStream(new byte[] { 0, 1, 2, 3, 4, 5 }))
using (MyBinaryReader reader = new MyBinaryReader(memStream))
{
ReadFew(reader);
Console.WriteLine("Reader stopped at position: " + memStream.Position);
}
输出:
阅读器停在位置:4
【讨论】: