我有一个MemoryStream,在do...while
循环中读取一些数据,我需要检查已读取的最后5个字节。
如何访问MemoryStream中已读取的最后5个字节?
只需将位置设置为后面的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;
。 - keeehlanstream.Seek(-5, SeekOrigin.Current)
而不是 stream.Position -= 5;
会更好吗? - AgentFireSeek()
在这里同样适用:stream.Seek(-5, SeekOrigin.Current)
。在 MemoryStream
的情况下,如果查看源代码,Seek()
会直接设置位置。使用 Position
属性更有效率一些,但差别不大。对于其他类型的流(例如基于磁盘的 I/O),设置位置可能会在幕后调用 Seek()
。 - Nicholas Carey
Seek
只是设置流的位置?如果您知道如何做我正在询问的事情,我将非常感激如果您能发布一个答案。 - keeehlan