private static string ToString(Reader input)
{
if (input is FastStringReader) // fast path
{
return ((FastStringReader) input).String;
}
try
{
int len = 256;
char[] buffer = new char[len];
char[] output = new char[len];
len = 0;
int n;
while ((n = input.read(buffer)) >= 0)
{
if (len + n > output.Length) // grow capacity
{
char[] tmp = new char[Math.Max(output.Length << 1, len + n)];
Array.Copy(output, 0, tmp, 0, len);
Array.Copy(buffer, 0, tmp, len, n);
buffer = output; // use larger buffer for future larger bulk reads
output = tmp;
}
else
{
Array.Copy(buffer, 0, output, len, n);
}
len += n;
}
return new string(output, 0, len);
}
finally
{
input.close();
}
}