private byte[] ReadByteArray(bool isBase64)
{
ArrayList list = new ArrayList();
const int MAX_ALLOC_SIZE = 64 * 1024;
int currentSize = 1024;
byte[] buffer;
int bytes = -1;
int offset = 0;
int total = 0;
buffer = new byte[currentSize];
list.Add(buffer);
while (bytes != 0)
{
if (offset == buffer.Length)
{
currentSize = Math.Min(currentSize * 2, MAX_ALLOC_SIZE);
buffer = new byte[currentSize];
offset = 0;
list.Add(buffer);
}
if (isBase64)
{
bytes = _r.ReadElementContentAsBase64(buffer, offset, buffer.Length - offset);
}
else
{
bytes = _r.ReadElementContentAsBinHex(buffer, offset, buffer.Length - offset);
}
offset += bytes;
total += bytes;
}
byte[] result = new byte[total];
offset = 0;
foreach (byte[] block in list)
{
currentSize = Math.Min(block.Length, total);
if (currentSize > 0)
{
Buffer.BlockCopy(block, 0, result, offset, currentSize);
offset += currentSize;
total -= currentSize;
}
}
list.Clear();
return result;
}