如何从我不写入的流中获取字节

时间:2012-06-04 11:34:37

标签: c# .net vb.net stream

我正在编写一个使用第三方.NET库的VB.net应用程序(但如果你愿意,可以用C#回答,没问题)。特别是,该库中的一个方法将IO.Stream作为输入(以及其他内容)并将其处理结果写入所述流。我的问题是该方法在写入后关闭了流,因此我无法读回它在其中写入的数据!

更具体一点:当然,如果流是FIeStream,它可以工作,因为它将数据写入磁盘,但是如果我想直接将数据读取到内存中呢?我尝试使用MemoryStream,但正如我所说,当方法返回时,流已经关闭,我无法从中读回任何内容:(

编辑:通过做类似于“usr”建议的事情来解决。如果有人需要,这是代码:

    Imports System.IO

Public Class CloseHijackedMemoryStream
    Inherits MemoryStream

    Public Overrides Sub Close()
        'We don't do anything, so the stream is still open
    End Sub

    Public Sub RealClose()
        MyBase.Close()
    End Sub
End Class

3 个答案:

答案 0 :(得分:1)

您可以围绕流编写包装类,将所有调用转发到基础(包装)流,但不转发Close和Dispose调用。这将阻止图书馆关闭它。

从Stream派生,将“内部流”作为ctor arg,并通过委托内部流来实现所有方法。

答案 1 :(得分:1)

MemoryStream有一个ToArray()方法,返回其全部内容。我刚做了一个快速测试,似乎在关闭后仍然有效(即使在处理完毕后)

答案 2 :(得分:1)

在这种情况下,您可以从MemoryStream创建自定义类型“MyMemoryStream”并覆盖Dispose和close方法。

public class MyMemoryStream : MemoryStream
{
    protected override void Dispose(bool disposing)
    {
    }
}

希望它有所帮助。