• ベストアンサー

ストリームについて

ファイルの入出力を勉強しているのですが、「ストリーム」 についての説明がうまく理解できません。 どなたか上手に説明できる人はいませんか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

 まず「STREAM=(FILE *)型の変数」というのは、明らかに誤解ですので補足しておきます。  さて「シーケンシャル」についてですが、これは「順次的な」という意味で、「sequential access(順次アクセス)」「sequential logic(順序論理)」など、コンピュータ関連でも様々なところで使われています。  また「シーケンシャルアクセス」とは「ファイルの先頭から順に連続的にアクセスする方法」で、通常のテキストファイルなどではこの方法でファイルアクセスを行います。  これに対し「ランダムアクセス」とは「ファイル内の任意の場所をとびとびにアクセスする方法」で、対象となるファイルは、固定長のレコード構造を持っている必要があります。  C/C++では、構造体配列をバイナリ形式でファイルに記録する場合に、ランダムアクセスが利用できます。  次に「コスト」についてですが、ここでは「ランダムアクセスをすると極端に性能が低下する」という意味で使っています。もちろん、高度な技術によって性能をカバーすることが出来たとしても、その技術開発に多大なコスト(ここでは時間や人件費を指す)がかかってしまうことは言うまでもありませんね。

saruno
質問者

お礼

ご丁寧なご解答ありがとうございました。 おかげさまで理解することができました。

その他の回答 (3)

  • verdian
  • ベストアンサー率75% (3/4)
回答No.4

leaz024氏がご指摘の通りです STREAM=(FILE *)は間違いです ただ私がCを勉強している時に読んだ本では STREAM=(FILE *)と置き換えて読むと すんなり理解できたもので・・・つい ごめんなさい・・・ あと補足すると宣言したので 恐縮ですが補足させていただきます > (FILE *)と言うことはファイルポインタと言うことでしょうか ファイルポインタです もっと精密にいうと FILE 型の変数へのポインタです FILE *fp=fopen("fname","rt"); とした時の fpの事を言っています

saruno
質問者

お礼

どうもありがとうございました。 やっと理解することができました。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

 「ストリーム」とは、シーケンシャルにしかアクセスできないデータのことを指します。 (厳密には、ランダムアクセスできても非常にコストが高いものも含みます。)  例えば、標準入出力は一切ランダムアクセスができないので、ストリームの代表格みたいなものです。  また磁気テープを扱うテープドライブは、ランダムアクセスできなくはないが非常にコストが高いため、ストリームデバイスと呼ばれます。(テープドライブは、テープストリーマとも呼ばれます。)

saruno
質問者

補足

ありがとうございます。なんとなく分かってきました。 申し訳ありませんが、もう少し質問をしてよろしいでしょうか。 「シーケンシャル」とは一体どういう意味なのでしょうか?  「コスト」とありますが、この語句は単純に「費用」と理解してよいのでしょうか?それとも「メモリがくう」などのほかの意味を含んでいるのでしょうか? よろしくお願いいたします。

  • verdian
  • ベストアンサー率75% (3/4)
回答No.1

英辞朗によると「STREAM=流れ」だそうです プログラムの世界で言うSTREAMとは 「データの流れ」そのものを抽象化して言うのではないでしょうか・・・って変な言い方ですね 正確かどうかはわかりませんが STREAM=(FILE *)型の変数 と考えて良いのではないでしょうか stdioやstdout,stderrも(FILE *)でストリームです (UNIXではファイルハンドルと称してintを用いますが その番号はストリーム配列の添字でしょうから 結局は同じでしょう) ・・・ よけい分かりにくくなったら御免なさい・・・m(_ _)m 回答の的をはずしている様でしたら補足要求を下さい できる限り補足いたします

saruno
質問者

補足

ありがとうございます。 (FILE *)と言うことはファイルポインタと言うことでしょうか? しつこくて申し訳ありませんが、お願いいたします。

関連するQ&A

  • Java ストリームをわかりやすく教えてください

    Javaを独学で学んでいる初心者です。 ストリームの意味がよくわからなく困っています。 参考書には「入出力機能を支えている概念がストリーム」と書いてあるのですが意味が分かりません。 まだまだ勉強不足で知識が至らないので、簡単なたとえ話などで説明していただけると嬉しいです。

    • ベストアンサー
    • Java
  • 標準ストリームが理解できません

    標準ストリームの意味が理解できず困っています。 色々なサイトを回って調べてみたのですが、あるサイトではデータが通る経路だと書かれていたり、またあるサイトでは入出力装置から情報を受け取ったり情報を渡したりするということだ、と書かれていたりなにが正しいのかさっぱりです。 普通に標準入出力関数とかは使ってきましたが、stdin等は理解しておく必要がありますよね?標準ストリームは具体的にどういう物か教えていただけたらうれしいです。回答お待ちしています。

  • ストリームについて具体的に

    ストリームは入出力装置へのアクセスのための情報を抽象化した抽象データ型だそうですが(Wikipediaより)、それは具体的にどうなっているのですか?FILE構造体のようなものでしょうか。 ・ストリームにはどんな情報が入っているのですか? ・ストリームはどこに展開されているのですか?メモリでしょうか。 あと、プログラミングは初心者なのでチンプンカンプンな質問をしているかも知れません。その場合は「何か勘違いしてますよ~」と指摘してくださると嬉しいです。回答お待ちしています。

  • ストリームって?

    プログラミングの超初心者なのですが、現在Cの勉強をしています。1つ分からない言葉があるのですが、「ストリーム」について教えてください。例えば「ファイルストリーム」「標準エラー出力ストリーム」「標準入力ストリーム」などです。この「ストリーム」という動作はどういった動作をさすのか教えていただければ幸いです。

  • ストリームについて

    ストリームが良く分かっていないのですが。 (現在の知識としては、バイトデータのようなデータ項目の流れ)という曖昧なイメージのままなのですが・・・ javaでストリームが必要な時とはどのような場合ですか? もしこれが無かった場合、データの入出力に当たってどのような不都合が生じるのでしょうか? またどうして、ストリームはバイト単位でデータを取り扱うのですか? (どうしてビット単位ではないのでしょうか?)

    • ベストアンサー
    • Java
  • ファイルを開く、ストリームを結びつける、とは?

    C言語の標準関数の説明の中に、 「ファイルを開く」 「ストリームと結びつける」 といった表現がでてくるのですが、これはどういう意味ですか? freopenを理解しようとしていたのですが・・・。 ファイルを開くとはFILE構造体を展開する?ファイルディスクリプタをシステムに登録する?・・・意味がいまいち掴めません。「ストリームと結びつける」も同様です。 これらは具体的にどういう意味なのでしょうか?回答よろしくお願いします。

  • ビットストリームと検波

    ビデオデッキの後ろを見るとビットストリームの入出力と、FM検波の入出力がありますが、これは一体何なのでしょうか?

  • ストリームについて

    バイト・ストリームとキャラクタ・ストリームの2種類が存在していますが、バイト・ストリームは、生のバイト (イメージデータなど) を読み込む時、また、文字(テキストファイル)を読み込むときはキャラクタ・ストリームを利用するという認識で良いのでしょうか? テキストファイル(アルファベット、日本語)処理ならどんな場合でもキャラクタ・ストリーム(FileReader,FileWriter)を使えばいいという考えでよろしいのかということでしょうか? 逆にバイト・ストリームで読み込んで処理する場合も可能ですよね? その場合、テキストファイルをバイト・ストリームで扱うメリットってあるのでしょうか? 何故疑問に思ったのかと言いますと、参考書にバイト・ストリームを扱った例文があり、テキストファイルを処理していたためです。テキストファイルの処理ならキャラクタストリームでいいんじゃないかと思い、逆にバイトストリームで扱うメリットを知りたかったのです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • ストリームについて

    ストリームってよくファイル操作の時に聞きますが 最近、stdinとかsdterrとかかかわってくるとまたストリームという単語がでてきます・・・・ いったいストリームという行為は目に見えないところでどんなことがおきているんですか??

  • ストリーム テキスト

    初心者の質問です。よろしくお願いします。 Javaのストリームを勉強しているのですが、FileReaderでテキストファイル(txt)を入力するにはどうすれば良いのでしょうか? Javaファイルは正しく入力できたのですが。 FileReader fr=new FileReader(args[0]);では、問題があるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java