Em vez de ler todo o tamanho do buffer, peça apenas no máximo o tamanho do buffer, mas também no máximo o que você acredita que resta. Para ser honesto, você também pode criar um buffer exatamente do tamanho certo em vez de um tamanho fixo.
// I assume this works for MySqlDataReader too...
int length = (int)reader.GetBytes(column, 0, null, 0, 0);
byte[] buffer = new byte[length];
int index = 0;
while (index < length)
{
int bytesRead = (int)reader.GetBytes(column, index,
buffer, index, length - index);
index += bytesRead;
}
Mas se você quisesse um buffer menor (por exemplo, se você estivesse processando um buffer de cada vez), você poderia usar:
int length = (int)reader.GetBytes(column, 0, null, 0, 0);
byte[] buffer = new byte[length];
int index = 0;
while (index < length)
{
int bytesRead = (int)reader.GetBytes(column, index, buffer, 0,
Math.Max(buffer.Length, length - index));
// Process the buffer, up to value bytesRead
// ...
index += bytesRead;
}