1

私はHTTPサーバー/クライアントの開発に取り組んでおり、現在、.txtファイルやその他の読みやすいファイルなど、多くのメモリを必要としない小さなファイルを送信できます。ただし、.exe や大きな .pdf などの大きなファイルを送信したい場合、メモリ エラーが発生します。これは、ファイルを送受信する前に、byte[] バッファのサイズを指定する必要があるという事実から発生しています。ストリームから読み取り中にバッファのサイズを取得する方法はありますか?

私はこのようなことをしたい:

//Create the stream.
private Stream dataStream = response.GetResponseStream();

//read bytes from stream into buffer.
byte[] byteArray = new byte[Convert.ToInt32(dataStream.Length)];
dataStream.read(byteArray,0,byteArray.Length);

ただし、「dataStream.Length」を呼び出すと、エラーがスローされます。

 ExceptionError: This stream does not support seek operations.

ストリームから byte[] の長さを取得する方法について誰かアドバイスをいただけますか?

ありがとう、

4

2 に答える 2

2

ストリームCopyToのメソッドを使用できます。

MemoryStream m = new MemoryStream();
dataStream.CopyTo(m);
byte[] byteArray = m.ToArray();

ファイルに直接書き込むこともできます

var fs = File.Create("....");
dataStream.CopyTo(fs);
于 2013-07-04T20:01:45.790 に答える
1

ネットワーク層には、応答ストリームの長さを知る方法がありません。

ただし、サーバーはその長さを通知することになっています。Content-Length応答ヘッダーを見てください。
そのヘッダーが欠落しているか正しくない場合は、運が悪いです。データがなくなるまで読み続ける必要があります。

于 2013-07-04T19:51:34.770 に答える