2

このMSDNページで説明されているように

http://msdn.microsoft.com/en-us/library/system.io.stream.aspx

PHPに相当するものは何ですか?

そのページのコメントの下にリストされている3つのことを行うことさえ可能ですか

ストリームには、次の 3 つの基本的な操作が含まれます。

  1. ストリームから読み取ることができます。読み取りとは、ストリームからデータ構造 (バイト配列など) へのデータの転送です。

  2. ストリームに書き込むことができます。書き込みとは、データ構造からストリームへのデータの転送です。

  3. ストリームはシークをサポートできます。シークとは、ストリーム内の現在の位置を照会および変更することです。シーク機能は、ストリームが持つバッキング ストアの種類によって異なります。たとえば、ネットワーク ストリームには現在位置の統一された概念がないため、通常はシークをサポートしていません。

4

2 に答える 2

4

PHPストリームはどうですか?彼らはあなたが探していると思われるものをほぼ正確にサポートしています.

于 2012-06-11T08:51:34.413 に答える
2

PHP には、これに対処するためのジェネリック クラスがありません。これには、作業に慣れていないかもしれないデータ型 ( Resource ) があります。

リソースは、ストリームのファイル記述子を保持するために使用できます。これらは、ファイル システム記述子、ネットワーク ストリーム、データベース接続の維持、さらにはデータベースの結果セットなど、さまざまな場所で使用されます。また、コンテキスト情報を維持するためにも使用されます。このタイプのリソースはストリームではなく、データ ストアのように動作します。PHP だけで独自のリソース タイプを定義することはできません。それらは基礎となる C++ コードの一部です。

多くの点で、リソースはオブジェクトのインスタンスのように動作し、おそらくこのように考えるのが最善です (ただし、オブジェクトのようにシリアル化したり、プロセス間で渡したりすることはできません)。ただし、PHP はオブジェクト指向言語ではないことに注意してください。これは、多くの OO 機能を提供するスクリプト言語であり、危険を冒して忘れてください。system.io.stream によって提供されるメソッドの機能は、ストリーム リソースを引数として受け入れる手続き型関数を介して PHP で提供されます。どの関数を使用する必要があるかは、使用しているストリームの種類によって異なります。

ほとんどのストリーム リソース タイプ (ただし、すべてではない - 重要な例外は、socketsfread()拡張機能によって作成されたものです) は、fwrite()他によって読み書きできます。ストリームの「拡張機能」 (非常に長い間、すべての新しい PHP インストールでデフォルトで有効になっています) は、さまざまな種類のストリームを作成、アクセス、および操作するための汎用レイヤーを提供しようとしますが、制限があります。

  • 一部の機能は、Windows の標準ファイル記述子または外部プロセスを指すストリームでは機能しません (「 」を参照stream_select()) 。
  • ストリーム拡張機能は、ソケット拡張機能が提供する機能の多くを提供しますが、すべてを提供するわけではありません (マルチキャスト クライアントなど)。
  • PHP のシングル スレッド同期の性質により、ノンブロッキング マルチ IO は完全な PITA として実装されます。これはストリームの制限ではなく、PHP 自体の制限です。
  • [過去に私を悩ませたその他の制限、現時点では思い浮かびません]

オブジェクト指向の適切な方法でストリームを処理したい場合は、手続き型関数呼び出しをラップするクラスを作成する必要があります。

于 2012-06-11T09:13:27.187 に答える