Чтение из базового потока (httpRequestStream)

У меня есть базовый поток, который является потоком HTTP-запроса и

var s=new HttpListener().GetContext().Request.InputStream;

Я хочу прочитать поток (который содержит не-символьный контент, потому что я отправил пакет)

Когда мы оборачиваем этот поток StreamReader, мы используем функцию ReadToEnd () StreamReader, он может читать весь поток и вернуть строку ...

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://127.0.0.1/");
listener.Start();
var context = listener.GetContext();
var sr = new StreamReader(context.Request.InputStream);
string x=sr.ReadToEnd(); //This Workds

но поскольку он имеет содержимое nonCharacter, мы не можем использовать StremReader (я перепробовал все механизмы кодирования ... использование строки просто неправильно). И я не могу использовать функцию

context.Request.InputStream.Read(buffer,position,Len) 

, потому что я не могу получить длина потока, InputStream.Length всегда генерирует исключение и не может использоваться ... и я не хочу создавать небольшой протокол, такой как [размер] [файл], и читать сначала размер, а затем файл ... каким-то образом StreamReader может получить длина .. и я просто хочу знать как. Я тоже пробовал это, и это не сработало

List<byte> bb = new List<byte>();
var ss = context.Request.InputStream;
byte b = (byte)ss.ReadByte();
while (b >= 0)
{
    bb.Add(b);
    b = (byte)ss.ReadByte();
}

Я решил это следующим образом

FileStream fs = new FileStream("C:\\cygwin\\home\\Dff.rar", FileMode.Create);
byte[] file = new byte[1024 * 1024];
int finishedBytes = ss.Read(file, 0, file.Length);
while (finishedBytes > 0)
{
    fs.Write(file, 0, finishedBytes);
    finishedBytes = ss.Read(file, 0, file.Length);
}
fs.Close();

спасибо, Джон, Дуглас

5
задан svick 15 January 2012 в 15:35
поделиться