我需要制作一个仅支持Stream
操作的Read()
- 该流将是只读且不可搜索的。我仍然必须实现许多属性,例如Position
(将抛出NotImplementedException
) - 这是很多样板代码。
对于此类流可能有一些标准实现,我只需要override
Read()
操作吗?
答案 0 :(得分:9)
您可以使用构造函数new MemorySream(byte[] buffer, bool writeable)
(documentation)。
将writeable
参数设置为false
会使流只读。
答案 1 :(得分:7)
BCL中不存在这样的流。你必须写它。在我的生活中,我已经实施了大约十几个这样的流,这也不算太糟糕。第二个更容易,因为你可以使用第一个作为模板。
我建议您从Stream
继承,而不是从其他流继承。如果您继承自MemoryStream
,则会滥用继承来保存代码,这不是其主要目的。您的派生流不会像MemoryStream
那样工作,不是 MemoryStream
。
首选组合而不是继承。