ソケットを介してデータを転送したいのですが、現在メモリストリームを作成しています。
ネットワークストリームも使用できます。
誰かがc#ネットワークストリームとメモリストリームの違いを理解するのを手伝ってもらえますか?
ANetworkStream
はソケットに直接関連しています。自身の長さを認識せず、シークできず、読み取り/書き込み関数は受信/送信APIに直接バインドされます(したがって、読み取りと書き込みは互いに完全に無関係です)。タイムアウトになる可能性があり、さらにデータを待機している場合、読み取りにかなりの時間がかかる可能性があります。
AMemoryStream
は基本的にローカルのラッパーbyte[]
です。既知の長さ(変更可能)があり、シークでき、読み取り/書き込みは直接関連しています。どちらも同じ位置のカーソルをインクリメントし、何かを書き込んだり、巻き戻したり、読み取ったりできます。すべての操作は非常にタイムリーです。
「類似点は何か」を尋ねる方が簡単かもしれません。これは単純です。両方とも、のサブクラスであるため、読み取り/書き込みAPIを備えていますStream
。
両方のストリームはStreamから派生しており、このクラスはさまざまな目的のためにワーパーです
私の理解によると、ネットワークストリームはネットワークインターフェイスから読み取ります。メモリストリームを使用する場合(つまり、同じシナリオで)、すべてのデータが最初にメモリに読み込まれます(実際の最後まで読み取ると想定しています)ストリーム)、その後、読み取り操作はメモリから読み取ります。
メモリストリームで発生する最初の読み取り操作では、すべてのデータをメモリにロードする必要があります。
ネットワークストリームの場合、データが到着したときにデータを読み取ることができます。