writeBytes method
Write a set of bytes to the end of the buffer.
Implementation
@override
void writeBytes(List<int> bytes, [int? len]) {
len ??= bytes.length;
while (length + len > _buffer.length) {
_expandBuffer((length + len) - _buffer.length);
}
//_buffer.setRange is very slow in Dart, a for-loop is much faster.
if (len == 1) {
_buffer[length] = bytes[0];
} else if (len == 2) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
} else if (len == 3) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
} else if (len == 4) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
} else if (len == 5) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
_buffer[length + 4] = bytes[4];
} else if (len == 6) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
_buffer[length + 4] = bytes[4];
_buffer[length + 5] = bytes[5];
} else if (len == 7) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
_buffer[length + 4] = bytes[4];
_buffer[length + 5] = bytes[5];
_buffer[length + 6] = bytes[6];
} else if (len == 8) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
_buffer[length + 4] = bytes[4];
_buffer[length + 5] = bytes[5];
_buffer[length + 6] = bytes[6];
_buffer[length + 7] = bytes[7];
} else if (len == 9) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
_buffer[length + 4] = bytes[4];
_buffer[length + 5] = bytes[5];
_buffer[length + 6] = bytes[6];
_buffer[length + 7] = bytes[7];
_buffer[length + 8] = bytes[8];
} else if (len == 10) {
_buffer[length] = bytes[0];
_buffer[length + 1] = bytes[1];
_buffer[length + 2] = bytes[2];
_buffer[length + 3] = bytes[3];
_buffer[length + 4] = bytes[4];
_buffer[length + 5] = bytes[5];
_buffer[length + 6] = bytes[6];
_buffer[length + 7] = bytes[7];
_buffer[length + 8] = bytes[8];
_buffer[length + 9] = bytes[9];
} else {
for (int i = 0, j = length; i < len; ++i, ++j) {
_buffer[j] = bytes[i];
}
}
length += len;
}