C# 如何访问MemoryStream中的某组字节?
我有一个MemoryStream,在C# 如何访问MemoryStream中的某组字节?,c#,stream,byte,C#,Stream,Byte,我有一个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]; st
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;
}
我以为
Seek
只是设置流的位置?如果你知道如何完成我的要求,如果你能给出答案,我将不胜感激?溪流不会,那是你的工作:)是的,成功了。我唯一需要改变的是stream.Position-=5代码>到流位置-=6编码>如果你编码stream.Seek(-5,SeekOrigin.Current)
比stream.Position-=5会更好吗代码>?我个人不认为有什么区别,但是如果你能解释一下它的好处,我会很高兴的。应该注意的是,Seek()
在这里同样有效:stream.Seek(-5,SeekOrigin.Current)
。对于内存流
,如果查看源代码,Seek()
直接设置位置。使用Position
属性稍微有效一些,但效率不高。对于其他类型的流(例如,磁盘基i/o),设置位置可能会调用引擎盖下的Seek()。