Java では、ストリームは非常に重要な概念です。
ストリームの概念は、UNIX のパイプの概念に由来します。 UNIX では、パイプは中断のないバイト ストリームであり、プログラムまたはプロセス間の通信を実装したり、周辺デバイスや外部ファイルなどの読み書きに使用されます。ストリームの方向に応じて、入力ストリームと出力ストリームに分割することができ、同時にバッファ ストリームなどの他のストリームを周囲に配置して、より多くのストリーム処理方法を取得できます。
PHP のストリームと Java のストリームは実際には同じ概念ですが、少し単純になっています。 PHP は主に Web 開発に使用されるため、「フロー」という概念が言及されることはほとんどありません。 Java の基盤がある場合は、PHP のストリームを理解するのが簡単になります。実際、SPL、例外、フィルターなど、PHP の多くの高度な機能はすべて Java の実装を参照しており、同じ概念と原則を持っています。
たとえば、以下は PHP SPL 標準ライブラリの使用法です (ディレクトリを走査し、一定の条件でファイルを検索します):
*/
public function __construct($path)
{
parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
}
/**
*/
public function accept()
{
$item = $this->getInnerIterator();
if ($item->isFile() && in_array(pathinfo($item->) ; getFileName()、pathinfo_extension)、$ this-> ext))
//
foreach (new RecursiveFileFilterIterator('D:/history') as $item)
{
echo $item;
}
Java にも同じコードがあります:
コードは次のとおりです:
FilenameFilter textFilter = new FilenameFilter()
{
public boolean accept(File dir, String name)
{
String lowercaseName = name.toLowerCase();
if ( lowercaseName.endsWith(".txt"))
{
return true;
}
else
{
return false;
}
} }
};
File[] files = f.listFiles(textFilter);
for (ファイル file : files)
{
if (file.isDirectory())
{
System.out.print("directory:");
}
else
{
System.out.print(" ファイル: ");
}
System.out.println(file.getCanonicalPath());
}
}
}
この例は、PHP と Java の概念が多面的に同じであることを説明するものであり、理解するために非常に大きな助けとなります。一方、この例は次の点でも役立ちます。前述のフィルタ フロー フィルタも設計モードの 1 つです。
私たちは、最初にサンプルを通して、一連の関数の使用法を理解することができます。次はソケットを使用してデータを取得する例です:
$out="POST http://nowmagic.net/news/1/comment HTTP/1.1rn";
$out.="ユーザーエージェント: Mozilla/ 5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"."rn";
$out.="Content-type: application/x-www- form-urlencodedrn";
$out.="PHPSESSID=082b0cc33cc7e6df1f87502c456c3eb0rn";
$out.="Content-Length: " . strlen($data) 。 "rn";
$out.="接続: 近いnrn";
$out.=$data."rnrn";
fwrite($fp, $out);
{
echo fgets($fp, 1280);
}
fclose($fp);
ストリームの別の例を見てみましょう:
file_get_contents 関数は通常、ファイルの内容を読み取るために使用されますが、この関数はリモート URL を取得するためにも使用でき、curl と同様の役割を果たします。
stream_context_create の詳細については、「PHP 関数の完了: stream_context_create() は POST/GET をシミュレートする」を参照してください。
上記の 2 つのストリーム シリーズ関数は、特定のプロトコルの入力ストリームと出力ストリームに作用するラッパーのようなストリームです。この種の使用法と概念は、実際には Java のストリームとあまり変わりません。たとえば、Java は次のように記述します:
フィルターフローの機能を見てみましょう:
/* 書き込まれたデータは rot13 フィルターによって処理されます*/
rewind($fp);
/* 書き込まれたデータを読み取り、一意性は当然処理された文字です */
fclose($fp);
// 出力: Guvf vf n grfg
stream_filter_append の変数「string.rot13」がどこからともなく出てきたことに驚かれるかもしれません。これは実際には PHP の組み込みフィルターです。
次のメソッドを使用して、PHP 組み込みストリームを出力します:
$ bucket-> data = md5($ bucket-> data);
コードをコピーします
コードは次のとおりです:
class md5_filter extends php_user_filter
{
$data="" ;while ( $bucket = stream_bucket_make_writeable($in))
_bucket_append($out, $bucket) ;}
call_user_func($this->params, $data);
return PSFS_PASS_ON;$callback = function($data)
PHP のストリームシリーズ関数には、ラッパー クラス ストリーム streamWrapper という非常に重要なストリームもあります。ラッパー ストリームを使用すると、さまざまなタイプのプロトコルが同じインターフェイスを使用してデータを操作できるようになります。
http://www.bkjia.com/PHPjc/745822.html
本当
http://www.bkjia.com/PHPjc/745822.html
技術記事