jgswift/qio

PHP 5.5+ I/O 工具包

0.1.2 2014-10-05 07:28 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:52:31 UTC


README

PHP 5.5+ I/O 工具包

Build Status Scrutinizer Code Quality Latest Stable Version License Coverage Status

安装

通过 CLI 使用 composer 安装

php composer.phar require jgswift/qio:0.1.*

通过 composer.json 使用 composer 安装

{
    "require": {
        "jgswift/qio": "0.1.*"
    }
}

描述

qio 是一组用于在 PHP 中抽象流应用程序的工具。PHP 已经提供了一套庞大而健壮的流处理实现,在许多情况下,qio 主要作为原生流处理的面向对象的抽象。然而,qio 还提供了位流、目录缓存、文件上传、通用资产管理以及管道的补充实现。

依赖

使用方法

文件写入器

以下是一个文件流处理的简单示例

// WRITING DATA
$file = new qio\File('myfile.txt');
$stream = new qio\File\Stream($file,qio\Stream\Mode::ReadWriteTruncate);
$writer = new qio\File\Writer($stream);

$stream->open();

$writer->write('foobar');

$stream->close();

文件读取器

// READING DATA
$file = new qio\File('myfile.txt');
$stream = new qio\File\Stream($file,qio\Stream\Mode::Read);
$reader = new qio\File\Reader($stream);

$stream->open();

$value = $reader->readAll();

$stream->close();

var_dump($value); // prints "foobar"

目录读取器

目录读取与上述文件操作概念类似

$dir = new qio\Directory(__DIR__);
$stream = new qio\Directory\Stream($dir);
$reader = new qio\Directory\Reader($stream);

$stream->open();

while($info = $reader->read()) {
    echo $info->getPath()."\n"; // PRINTS PATH
}

$stream->close();

内存写入器

这是一个处理字节读取/写入的内存流

// WRITING BYTES
$file = new qio\File('myfile.txt');
$stream = new qio\File\Stream($file,qio\Stream\Mode::ReadWriteTruncate);
$writer = new qio\Memory\Writer($stream);

$stream->open();

$writer->writeString('test');
$writer->writeInteger(4);
$writer->writeBoolean(true);

$stream->close();

内存读取器

// READING BYTES
$file = new qio\File('myfile.txt');
$stream = new qio\File\Stream($file,qio\Stream\Mode::Read);
$reader = new qio\Memory\Reader($stream);

$stream->open();

$string = $reader->readString();
$int = $reader->readInteger();
$bool = $reader->readBoolean();

$stream->close();

var_dump($string,$int,$bool); // PRINTS 'test', 4, true

对象写入器

通过在序列化写入器内部包装文件写入器来动态序列化数据

class User {
    public $name;
}

$user = new User;
$user->name = 'test';

$file = new qio\File('myfile.txt');
$stream = new qio\File\Stream($file,qio\Stream\Mode::ReadWriteTruncate);
$writer = new qio\Object\Serial\Writer(
                  new qio\File\Writer($stream)
              );

$stream->open();

$writer->write($user); // write user to stream

$stream->close();

对象读取器

通过在序列化读取器中包装文件读取器来反序列化序列化数据

$file = new qio\File('myfile.txt');
$stream = new qio\File\Stream($file,\qio\Stream\Mode::Read);
$reader = new qio\Object\Serial\Reader(
                  new qio\File\Reader($stream)
              );

$stream->open();

$user = $reader->read(); // read user from stream

$stream->close();

var_dump($user); // User#object { "name" => "test" }

读取器管道

自动从源流读取输入数据并将其写入输出流的管道

$myfile = new qio\File('myfile.txt');
$otherfile = new qio\File('otherfile.txt');

$source = new qio\File\Stream($file,qio\Stream\Mode::Read);
$target = new qio\File\Stream($otherfile,qio\Stream\Mode::ReadWriteTruncate);

$reader = new qio\File\Reader($source);
$writer = new qio\File\Writer($target);

$source->open();
$target->open();

$reader->pipe($writer);

$source->close();
$target->close();