void EnsureCapacity (int capacity) {
if (buffer.Length >= capacity)
return;
capacity += PreferredLength;
capacity = (capacity / PreferredLength) * PreferredLength;
byte[] temp = new byte[capacity];
Array.Copy(buffer, 0, temp, 0, buffer.Length);
buffer = temp;
}