1. ホーム
  2. c#

ストリームとはどういう意味ですか?その特徴は?

2023-11-16 16:24:15

質問

C++ C# はどちらも stream を使い、多くのクラスに名前を付けています。

  • C++ : iostream , istream , ostream , stringstream , ostream_iterator , istream_iterator ...
  • C# : Stream , FileStream , MemoryStream , BufferedStream ...

そこで、私は、どのように stream は何を意味するのか? の特徴とは何でしょうか? stream ? この用語は、いつクラスの名前に使ってもいいのですか? ファイルI/Oクラスのみに限定されるのでしょうか?

興味深いことに C は、私が知る限り、この単語をどこにも使っていません。

どのように解決するのですか?

多くのデータ構造 (リスト、コレクションなど) は、以下のように動作します。 コンテナ - として機能し、オブジェクトの集合を保持します。しかし、ストリームは違います。リストがバケツだとすれば、ストリームはホースです。ストリームからデータを引き出したり、ストリームにデータを押し込んだりすることはできますが、通常は 一度だけ で、しかも 一方向 (のみです(もちろん例外はあります)。たとえば、ネットワーク上の TCP データはストリームです。データのチャンクを送信 (または受信) できますが、それは他のコンピューターとの接続時のみで、通常は 1 回のみです。

ストリームは、圧縮ストリーム、暗号化ストリームなど、それを通過するデータを操作することもできます。しかし、ここでも基本的なメタファーは、データのホースです。ファイルは一般に (あるレベルでは) ストリームとしてアクセスされ、シーケンシャルなデータのブロックにアクセスできます。もちろん、ほとんどのファイルシステムはランダムアクセスも提供するので、ストリームにはシーク、位置、長さなどの機能がありますが、すべての実装でサポートされているわけではありません。あるストリームをシークしたり、開いているソケットの長さを取得したりすることは、何の意味も持ちません。