2

質問は簡単です: ネットワークストリームの StreamWriter の WriteLine() は常に行全体を配信しますか? それともいくつかの制限がありますか?たとえば、あるサイズの行のみを配信します。

私のポイントは、WriteLine(1行に非常に長い文字列(たとえば10000000文字))を呼び出すと、StreamReaderのReadLine()が送信したのと同じようにそれを受け取るでしょうか? それとも、一部だけ受け取りますか?

4

3 に答える 3

2

はい、ストリームの反対側のReadLineaStreamReaderは常に完全な行を読み取ります (または生成します) が、それはネットワーク ストリーム以上OutOfMemoryExceptionのプロパティです。ReadLineネットワーク レベルでは、 のNetworkStream場合、複数の個別の送受信に分割されている可能性があります。

ReadLine改行シーケンスが表示されるまで戻りません。


(注意 - 渡す文字列WriteLineに内部的に改行シーケンスが含まれている場合、最初の改行シーケンスまでの文字列のその部分のみを受け取ります)

于 2013-03-07T14:56:33.530 に答える
1

ALLに関係なく、書き込みと読み取りを行います。

たとえば、今日、私は183,000 桁BigIntegers超える数字を書き込むストリームを使用して作業していました (ただし、時間がかかりました!)。WriteLine

于 2013-03-07T14:54:24.650 に答える
1

WriteLine文字列を多くのパケットに分割する場合がありますが、反対側で使用している限り、ReadLine気にする必要はありません。

ReadLine複数のパケットで構成されているかどうかに関係なく、接続が失敗しない場合 (および十分なメモリがある場合など) は、常に行全体を読み取ります。

より正確に言えば、StreamWriter常に文字列全体を NetworkStream に配信します。これは、文字列、ネットワーク構成などの多くの要因に応じて、一度にすべてを送信する場合と送信しない場合があります。反対側では、同様の事が起こります。NetworkStream.Read は、一度に取得できる分だけ読み取り、そのすべてを StreamReader に渡しますが、 を使用している場合StreamReader.ReadLine、メソッドは完全な行を取得するまで何も返しません。

于 2013-03-07T14:56:23.997 に答える