繁体   English   中英

用memorystream清除二进制写入器

[英]Clear binarywriter with memorystream

我有一个带有内存流的二进制编写器,如果发生以下一种情况,我需要清除它:

public void Execute() {
    MemoryStream memoryStream = new MemoryStream();
    BinaryWriter writer = new BinaryWriter(memoryStream);
    Log log = new Log(writer);
    log.Write("OK1");
    ...

    // If condition
    memoryStream = new MemoryStream();
    ...
    log.Write("OK2");
    ...
}

public class Log {

    private BinaryWriter log;

    public Log(BinaryWriter bw)
    {
        log = bw;
    }

    public void write(string msg)
    {
        log.Write(msg);
    }
}

但是问题是内存流为空。 我尝试再次创建一个新的BinaryWriter:

public void Execute() {
    MemoryStream memoryStream = new MemoryStream();
    BinaryWriter writer = new BinaryWriter(memoryStream);
    Log log = new Log(writer);
    log.Write("OK1");
    ...

    // If condition
    memoryStream = new MemoryStream();
    writer = new BinaryWriter(memoryStream);
    ...
    log.Write("OK2");
    ...
}

public class Log {

    private BinaryWriter log;

    public Log(BinaryWriter bw)
    {
        log = bw;
    }

    public void write(string msg)
    {
        log.Write(msg);
    }
}

但是BinaryWriter和MemoryStream都是empry。

如何使用memorystream清除二进制写入器? 我需要将memorystream的最终内容写入文件。

谢谢!

此代码通过内存流初始化log对象,然后创建另一个引用参考存储在memoryStream内存流,但是log对象二进制编写器具有其原始内存流,而不是新的内存流。 您可以通过检查它们的HashCode进行检查。

您是说要写入其他MemoryStream吗? 您已将旧writer的引用传递给Log因此Log实例将保留引用。 此后更改writer变量将不会生效。 你需要

  1. 创建新的日志和新传writer给它
  2. 公开一种Log方法,以允许从外部操作该对象保存的BinaryWriter

第一个代码段无效,因为BinaryWriter仍在使用旧的MemoryStream引用。 您不能说服它使用新的。

第二个片段不起作用,因为您的Log类仍在使用旧的BinaryWriter引用。 您可以通过添加一种更新“ log”的方法来说服它使用新的。

或者,您可以作弊并调用memoryStream.SetLength(0)强制其从头开始。

请回顾使用MemoryStream进行日志记录的智慧。 对于要达到的大小没有上限。 大概是您寻找此解决方法的原因。 当您需要倒带视频流时,将所有内容完全扔掉并不容易。 当您需要日志中的信息来解决问题时,Murphy会确保在确切的时间发生这种情况。 循环缓冲区不存在此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM