【发布时间】:2011-06-05 14:55:06
【问题描述】:
我最近插入了一个自定义编码器(使用二进制编码器进行实际编码,使用 Gzip 压缩器压缩字节数组)。它工作正常。现在的问题是对于小消息大小它实际上膨胀了字节数组。我想知道是否有办法避免这种情况。特别是如果有办法我可以应用条件压缩和解压缩。
我确实尝试过做类似的事情 - 放置一个条件
if(buffer.Count <= 5000)
skip compression
但问题是即使字节没有被压缩,另一端也会发生解压缩。我希望这是有道理的。
以下是发生压缩和解压缩的函数(来自 CompactMessageEncoder 的代码 sn-p)
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
ArraySegment<byte> decompressedBuffer = DecompressBuffer(buffer, bufferManager);
LogWrite("Decompressed from {0} bytes to {1} bytes", buffer.Count, decompressedBuffer.Count);
Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager);
returnMessage.Properties.Encoder = this;
return returnMessage;
}
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
var buffer = _innerEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);
var compressedBuffer = CompressBuffer(buffer, bufferManager, messageOffset);
LogWrite("Compressed from {0} bytes to {1} bytes", buffer.Count, compressedBuffer.Count);
return compressedBuffer;
}
【问题讨论】:
-
你能在那些被压缩的邮件中添加一个客户标头吗? stackoverflow.com/questions/964433/…
-
@Mitch:这可能行不通。因为我必须添加假设我将自定义标头添加到 Message 类并在 WriteMessage() 函数中压缩它。在 ReadMessage() 中,我必须在获取 Message 类并读取标题之前对其进行解压缩。