[英]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
变量将不会生效。 你需要
writer
给它 Log
方法,以允许从外部操作该对象保存的BinaryWriter
第一个代码段无效,因为BinaryWriter仍在使用旧的MemoryStream引用。 您不能说服它使用新的。
第二个片段不起作用,因为您的Log类仍在使用旧的BinaryWriter引用。 您可以通过添加一种更新“ log”的方法来说服它使用新的。
或者,您可以作弊并调用memoryStream.SetLength(0)强制其从头开始。
请回顾使用MemoryStream进行日志记录的智慧。 对于要达到的大小没有上限。 大概是您寻找此解决方法的原因。 当您需要倒带视频流时,将所有内容完全扔掉并不容易。 当您需要日志中的信息来解决问题时,Murphy会确保在确切的时间发生这种情况。 循环缓冲区不存在此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.