public bool Equals(Stream another)
{
var cms = another as ChunkedMemoryStream ?? new ChunkedMemoryStream(another);
if (cms.TotalSize != TotalSize)
return false;
var len = TotalSize >> BlockShift;
for (int i = 0; i < len; i++)
{
var nb = cms.Blocks[i];
var ob = Blocks[i];
for (int j = 0; j < BlockSize; j++)
if (nb[j] != ob[j])
return false;
}
var nlb = cms.Blocks[len];
var olb = Blocks[len];
var diff = TotalSize & BlockAnd;
for (int i = 0; i < diff; i++)
if (nlb[i] != olb[i])
return false;
return true;
}