如何在MemoryStream中访问特定字节组?

3

我有一个MemoryStream,在do...while循环中读取一些数据,我需要检查已读取的最后5个字节。

如何访问MemoryStream中已读取的最后5个字节?


我认为Seek只是设置流的位置?如果您知道如何做我正在询问的事情,我将非常感激如果您能发布一个答案。 - keeehlan
保存你已读取的最后5个字节?流不会,那是你的工作 :) - nvoigt
1个回答

3

只需将位置设置为后面的5个字节,并重新读取这些字节:

byte[] GetLast5BytesRead(MemoryStream stream)
{
    // TODO: Validation that stream.Position is at least 5
    byte[] ret = new byte[5];
    stream.Position -= 5;
    // TODO: Consider throwing an exception if this doesn't return 5
    Stream.Read(ret, 0, 5);
    return ret;
}

没错,就是这个。我需要改的只是 stream.Position -= 5; 改为 stream.Position -= 6; - keeehlan
你觉得如果使用 stream.Seek(-5, SeekOrigin.Current) 而不是 stream.Position -= 5; 会更好吗? - AgentFire
我个人看不出区别,但如果您能解释一下好处,我会很高兴的。 - keeehlan
需要注意的是,Seek() 在这里同样适用:stream.Seek(-5, SeekOrigin.Current)。在 MemoryStream 的情况下,如果查看源代码,Seek() 会直接设置位置。使用 Position 属性更有效率一些,但差别不大。对于其他类型的流(例如基于磁盘的 I/O),设置位置可能会在幕后调用 Seek() - Nicholas Carey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接