Вы можете прочитать байты прямо из потока. StreamReader работает со строками. Это на самом деле наследует TextReader. Альтернативно посмотрите на использование BinaryReader, который работает на байтах.
(Поскольку вы пометили его как C #, я напишу пример кода на C #.)
Stream s = response.GetResponseStream()
MemoryStream memStream = new MemoryStream();
int bytesRead;
byte[] buffer = new byte[0x1000];
for (bytesRead = s.Read(buffer, 0, buffer.Length); bytesRead > 0; bytesRead = s.Read(buffer, 0, buffer.Length))
{
memStream.Write(buffer, 0, bytesRead);
}
s.Close();
return memStream.ToArray();