質問は簡単です: ネットワークストリームの StreamWriter の WriteLine() は常に行全体を配信しますか? それともいくつかの制限がありますか?たとえば、あるサイズの行のみを配信します。
私のポイントは、WriteLine(1行に非常に長い文字列(たとえば10000000文字))を呼び出すと、StreamReaderのReadLine()が送信したのと同じようにそれを受け取るでしょうか? それとも、一部だけ受け取りますか?
質問は簡単です: ネットワークストリームの StreamWriter の WriteLine() は常に行全体を配信しますか? それともいくつかの制限がありますか?たとえば、あるサイズの行のみを配信します。
私のポイントは、WriteLine(1行に非常に長い文字列(たとえば10000000文字))を呼び出すと、StreamReaderのReadLine()が送信したのと同じようにそれを受け取るでしょうか? それとも、一部だけ受け取りますか?
はい、ストリームの反対側のReadLine
aStreamReader
は常に完全な行を読み取ります (または生成します) が、それはネットワーク ストリーム以上OutOfMemoryException
のプロパティです。ReadLine
ネットワーク レベルでは、 のNetworkStream
場合、複数の個別の送受信に分割されている可能性があります。
ReadLine
改行シーケンスが表示されるまで戻りません。
(注意 - 渡す文字列WriteLine
に内部的に改行シーケンスが含まれている場合、最初の改行シーケンスまでの文字列のその部分のみを受け取ります)
ALLに関係なく、書き込みと読み取りを行います。
たとえば、今日、私は183,000 桁をBigIntegers
超える数字を書き込むストリームを使用して作業していました (ただし、時間がかかりました!)。WriteLine
WriteLine
文字列を多くのパケットに分割する場合がありますが、反対側で使用している限り、ReadLine
気にする必要はありません。
ReadLine
複数のパケットで構成されているかどうかに関係なく、接続が失敗しない場合 (および十分なメモリがある場合など) は、常に行全体を読み取ります。
より正確に言えば、StreamWriter
常に文字列全体を NetworkStream に配信します。これは、文字列、ネットワーク構成などの多くの要因に応じて、一度にすべてを送信する場合と送信しない場合があります。反対側では、同様の事が起こります。NetworkStream.Read は、一度に取得できる分だけ読み取り、そのすべてを StreamReader に渡しますが、 を使用している場合StreamReader.ReadLine
、メソッドは完全な行を取得するまで何も返しません。