C#中的Streams实现

Yip*_*Yay 2 c# custom-action stream

我需要做些什么来实现我自己的流,它使用自定义压缩例程,例如,类似于GZipStream

我显然必须对类进行子Stream类化,但是我应该实现哪些方法以及哪些方法可以保留其默认实现?

基本上,文档有一个特殊的部分,但也许有更好更容易的选择?

对实施者的说明

实现Stream的派生类时,必须提供Read和Write方法的实现.异步方法BeginRead,EndRead,BeginWrite和EndWrite是通过同步方法Read和Write实现的.同样,您的Read和Write实现将与异步方法一起正常工作.ReadByte和WriteByte的默认实现创建一个新的单元素字节数组,然后调用Read和Write的实现.从Stream派生时,如果您有内部字节缓冲区,强烈建议您覆盖这些方法以访问内部缓冲区,以获得更好的性能.您还必须提供CanRead,CanSeek,CanWrite,Flush,Length,Position,Seek和SetLength的实现.

不要覆盖Close方法,而是将所有Stream清理逻辑放在Dispose方法中.有关更多信息,请参阅实现Dispose方法.

Mar*_*ell 5

必须覆盖的方法是abstract.在完全实现它们之前,它不会编译.但是,你被允许抛出NotSupportedException,例如,如果你回来falseCanSeek,然后Seek()被允许抛出.同样,如果您的流是只读的(报告falseCanWrite),那么它可以从抛出Write.

实际上,对于像这样的复杂情况,我希望你最终会覆盖大多数(非异步)API.