最近在使用 C# 和 ActiveMQ(通过 Apache.NMS 库)做一些工作时,我在ActiveMQBytesMessage
public new byte[] Content
{
get
{
byte[] buffer = (byte[]) null;
this.InitializeReading();
if (this.length != 0)
{
buffer = new byte[this.length];
this.dataIn.Read(buffer, 0, buffer.Length);
}
return buffer;
}
..(setter omitted)
}
该InitialiseReading
方法处理数据从活动 MQ 到.dataIn
现场的连接和流式传输。但问题是它每次都这样做。一旦读取了该数据,就再也无法读取它,并且 dataIn 字段被置零并重置。因此,只需观察属性并再次观察它,您就会丢失数据。这导致了一些非常奇怪的错误,例如:
byte [] myBytes = new byte[msg.Content.Length];
//Touched the property. Data read in.
msg.Content.CopyTo(myBytes,0);
//Uh oh! touched it again, copying a zero'd array.
或者当您在调试时,您在属性上放置了一个监视变量或不小心将鼠标悬停在属性上。
这种机制是使用流数据属性的公认或流行方式吗?