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

本文关键字:获取 字节 | 更新日期: 2023-09-27 18:36:21

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

更具体地说:当然,如果流是 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

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

您可以围绕流编写一个包装类,该类将所有调用转发到基础(包装)流,但不转发关闭和释放调用。这将阻止库关闭它。

从 Stream 派生,将"内部流"作为 ctor 参数,并通过委托给内部流来实现所有方法。

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

在这种情况下,您可以从 MemoryStream 创建自定义类型"MyMemoryStream",并重写 Dispose and close 方法。

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

希望对您有所帮助。