ekstazi/async-binary-stream

一组用于处理二进制数据的amphp流。它可以读取指定长度的ByteBuffer并写入它。

1.1 2020-04-11 09:25 UTC

This package is auto-updated.

Last update: 2024-09-11 19:59:34 UTC


README

一组用于处理二进制数据的amphp流。它可以读取 ByteBuffer 并指定长度写入。

安装

此包可以作为Composer依赖项安装。

composer require ekstazi/async-binary-stream

要求

PHP 7.2+

用法

用于读取和解析数据

use \ekstazi\stream\binary\ByteReader;
use \Amp\ByteStream\InputStream;
use \PHPinnacle\Buffer\ByteBuffer;

/** @var InputStream $inputStream */
$reader = new ByteReader($inputStream);
/** @var ByteBuffer $buffer */
$buffer = yield $reader->readBytes(4);

$opCode = $buffer->consumeInt16();
$mask = $buffer->consumeInt16();

用于写入数据

use \ekstazi\stream\binary\ByteWriter;
use \Amp\ByteStream\OutputStream;
use \PHPinnacle\Buffer\ByteBuffer;

$opCode = 2;
$mask = 1;

/** @var OutputStream $outputStream */
$writer = new ByteWriter($outputStream);

/** @var ByteBuffer $buffer */
$buffer = new ByteBuffer();
$buffer->appendInt16($opCode);
$buffer->appendInt16($mask);

yield $writer->writeBytes($buffer);

用于记录读取的数据

use \ekstazi\stream\binary\ByteReader;
use \ekstazi\stream\binary\ByteRecorder;

use \Amp\ByteStream\InputStream;
use \PHPinnacle\Buffer\ByteBuffer;

/** @var InputStream $inputStream */
$reader = new ByteReader($inputStream);
$recorder = new ByteRecorder($reader);

$recorder->startRecord();
/** @var ByteBuffer $buffer */
$buffer = yield $recorder->readBytes(4);

$opCode = $buffer->consumeInt16();
$mask = $buffer->consumeInt16();
// ....
$buffer = yield $recorder->readBytes(12);
// ....

/** @var ByteBuffer $recorded  The data recorded after startRecord */
$recorded = $recorder->stopRecord();