Swift_CharacterStream_ArrayCharacterStream::write PHP Method

write() public method

Write $chars to the end of the stream.
public write ( string $chars )
$chars string
    public function write($chars)
    {
        if (!isset($this->_charReader)) {
            $this->_charReader = $this->_charReaderFactory->getReaderFor($this->_charset);
        }
        $startLength = $this->_charReader->getInitialByteSize();
        $fp = fopen('php://memory', 'w+b');
        fwrite($fp, $chars);
        unset($chars);
        fseek($fp, 0, SEEK_SET);
        $buffer = array(0);
        $buf_pos = 1;
        $buf_len = 1;
        $has_datas = true;
        do {
            $bytes = array();
            // Buffer Filing
            if ($buf_len - $buf_pos < $startLength) {
                $buf = array_splice($buffer, $buf_pos);
                $new = $this->_reloadBuffer($fp, 100);
                if ($new) {
                    $buffer = array_merge($buf, $new);
                    $buf_len = count($buffer);
                    $buf_pos = 0;
                } else {
                    $has_datas = false;
                }
            }
            if ($buf_len - $buf_pos > 0) {
                $size = 0;
                for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) {
                    ++$size;
                    $bytes[] = $buffer[$buf_pos++];
                }
                $need = $this->_charReader->validateByteSequence($bytes, $size);
                if ($need > 0) {
                    if ($buf_len - $buf_pos < $need) {
                        $new = $this->_reloadBuffer($fp, $need);
                        if ($new) {
                            $buffer = array_merge($buffer, $new);
                            $buf_len = count($buffer);
                        }
                    }
                    for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) {
                        $bytes[] = $buffer[$buf_pos++];
                    }
                }
                $this->_array[] = $bytes;
                ++$this->_array_size;
            }
        } while ($has_datas);
        fclose($fp);
    }

Usage Example

 public function testCharactersCanBeReadAsByteArrays()
 {
     $reader = $this->_getReader();
     $factory = $this->_getFactory($reader);
     $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8');
     $reader->shouldReceive('getInitialByteSize')->zeroOrMoreTimes()->andReturn(1);
     //String
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd0), 1)->andReturn(1);
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd0), 1)->andReturn(1);
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd0), 1)->andReturn(1);
     //Stream
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd0), 1)->andReturn(1);
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd1), 1)->andReturn(1);
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd0), 1)->andReturn(1);
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd1), 1)->andReturn(1);
     $reader->shouldReceive('validateByteSequence')->once()->with(array(0xd1), 1)->andReturn(1);
     $stream->importString(pack('C*', 0xd0, 0x94, 0xd0, 0xb6, 0xd0, 0xbe));
     $stream->write(pack('C*', 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x85));
     $this->assertEquals(array(0xd0, 0x94), $stream->readBytes(1));
     $this->assertEquals(array(0xd0, 0xb6, 0xd0, 0xbe), $stream->readBytes(2));
     $this->assertEquals(array(0xd0, 0xbb), $stream->readBytes(1));
     $this->assertEquals(array(0xd1, 0x8e, 0xd0, 0xb1, 0xd1, 0x8b), $stream->readBytes(3));
     $this->assertEquals(array(0xd1, 0x85), $stream->readBytes(1));
     $this->assertSame(false, $stream->readBytes(1));
 }
All Usage Examples Of Swift_CharacterStream_ArrayCharacterStream::write