名前¶
SWF::BinStream - バイナリストリームの読み書き
概要¶
use SWF::BinStream;
$read_stream = SWF::BinStream::Read->new($binary_data, \&adddata);
$byte = $read_stream->get_UI8;
$signedbyte = $read_stream->get_SI8;
$string = $read_stream->get_string($length);
$bits = $read_stream->get_bits($bitlength);
....
sub adddata {
if ($nextdata) {
shift->add_stream($nextdata);
} else {
die "The stream ran short ";
}
}
$write_stream = SWF::BinStream::Write->new;
$write_stream->set_UI8($byte);
$write_stream->set_SI8($signedbyte);
$write_stream->set_string($string);
$write_stream->set_bits($bits, $bitlength);
$binary_data=$write_stream->flush_stream;
....
説明¶
SWF::BinStreamモジュールは、バイト単位、ビット単位で読み書きできるバイナリストリームを提供します。SWFファイルのようなビット単位で圧縮されたファイルを扱うのに適しています。
SWF::BinStream::Read¶
読み込み用のストリームを提供します。まずストリームにデータを追加し、 バイト/ビット単位で読み出します。ストリーム内のデータがなくなると、 ユーザー定義のコールバックルーチンを呼び出します。 get_UI16, get_SI16, get_UI32, get_SI32は、数を VAXバイトオーダーで読み出します。 get_bits, get_sbitsは、MSBからLSBに向かってビット列を読み出します。 get_UI*, get_SI*, get_stringは、ビット読み込み途中のバイトがあれば 読み飛ばし、次のバイトから読み出します。 ビット読み込み途中の残りのビットを手動で読み飛ばすにはflush_bitsを使ってください。
メソッド¶
- SWF::BinStream::Read->new( [ $initialdata, \&callback_in_short, $version ] )
-
読み込みストリームを作成します。省略可能な3つの引数を取ります。 最初の引数は、ストリームに最初に保持するデータです。 2番目の引数は、ストリーム中のデータがなくなったときに呼ばれるコールバックルーチンのリファレンスです。 コールバックルーチンは、ストリームオブジェクトと、必要なバイト数を引数に取ります。 3番目の引数はSWFのバージョン番号で、デフォルトは5です。いくつかのSWFタグはバージョンによって構成が変わるため、適切なバージョンを指定する必要があります。
- $stream->Version
-
SWFバージョンを返します。
- $stream->add_codec( $codec_name )
-
ストリームにデコーダを追加します。 今のところ、'Zlib'デコーダのみ使えます。
- $stream->add_stream( $binary_data )
-
ストリームにデータを追加します。
- $stream->Length
-
ストリームに残っているデータ長を返します。
- $stream->tell
-
ストリームから何バイト読みとったかを返します。
- $stream->get_string( $num )
-
文字列を$numバイト読みとります。
- $stream->get_UI8
-
符号なし1バイト整数を読みとります。
- $stream->get_SI8
-
符号つき1バイト整数を読みとります。
- $stream->get_UI16
-
符号なし2バイト整数を読みとります。
- $stream->get_SI16
-
符号つき2バイト整数を読みとります。
- $stream->get_UI32
-
符号なし4バイト整数を読みとります。
- $stream->get_SI32
-
符号つき4バイト整数を読みとります。
- $stream->get_bits( $num )
-
$numビットの符号なし整数を読みとります。
- $stream->get_sbits( $num )
-
$numビットの符号つき整数を読みとります。
- $stream->flush_bits
-
ビット読み込み途中の1バイトの残りのビットを読み飛ばし、次のバイトから読むようにします。 ビット読み込み途中のバイトがなければ何もしません。
SWF::BinStream::Write¶
書き込みストリームを提供します。バイト/ビットデータを書き込み、結果の文字列を flush_streamを用いて取り出します。autoflushメソッドを使って、 自動的にストリーム内容を取り出してコールバックルーチンに渡すことができます。 set_UI16, set_SI16, set_UI32, set_SI32は、数をVAXバイトオーダーで ストリームに書き込みます。 set_bits, set_sbitsはビットをMSBからLSBに向かって書き込みます。 set_UI*, set_SI*, set_stringは、ビット書き込み途中のバイトの残りを0で埋め、 次のバイトから書き始めます。 手動でバイト境界から書き始める必要があるときはflush_bitsを使ってください。
メソッド¶
- SWF::BinStream::Write->new([$version])
-
書き込みストリームを作成します。 省略可能な引数にSWFのバージョン番号をとります。デフォルトは5です。いくつかのSWFタグはバージョンによって構成が変わるため、適切なバージョンを指定する必要があります。
- $stream->Version
-
SWFバージョンを返します。
- $stream->add_codec( $codec_name )
-
ストリームのエンコーダを追加します。 今のところ'Zlib'エンコーダのみ使えます。
- $stream->autoflush( $size, \&callback_when_flush )
-
$sizeバイト以上書き込んだらストリームをフラッシュしてコールバックルーチンを呼ぶよう、 ストリームに要求します。 コールバックルーチンは、ストリーム自身とフラッシュされたストリーム内容を引数に取ります。
- $stream->flush_stream( [$size] )
-
ストリームをフラッシュして、フラッシュされた内容を返します。 $sizeを指定すると、$sizeバイトだけフラッシュして返します。 指定がなかったり、ストリーム内のデータが指定した数より少なければ、 ビット書き込み途中のバイトも含めてすべてのデータをフラッシュします。
- $stream->flush_bits
-
ビット書き込み途中のバイトの残りのビットを0で埋め、次のバイトから書き込むようにします。
- $stream->Length
-
ストリーム中に何バイト残っているかを返します。
- $stream->tell
-
ストリームに何バイト書き込んだかを返します。
- $stream->mark( [$key, [$obj]] )
-
現在のtell値を、$keyに関連づけて$objとともに保持します。 $keyのみを引数にして呼ぶと、スカラコンテキストでは$keyに関連づけられたtell値を、 リストコンテキストではtell値とオブジェクトのリストを、それぞれ返します。 引数なしで呼ぶと、マークのリスト( KEY1, [ TELL_NUMBER1, OBJ1 ], KEY2, ...)を 返します。
- $stream->sub_stream
-
一時的なサブストリームを作成します。サブストリームをflush_streamすると、 データとマークを親のストリームに書き込んでサブストリームは解放されます。
例)様々な長さのデータを、その長さを書き込んでから書き込む。
$sub_stream=$parent_stream->sub_stream; write_data($sub_stream); $parent_stream->set_UI32($sub_stream->Length); $sub_stream->flush_stream;
- $stream->set_string( $str )
-
文字列を書き込みます。
- $stream->set_UI8( $num )
-
符号なし1バイト整数を書き込みます。
- $stream->set_SI8( $num )
-
符号つき1バイト整数を書き込みます。
- $stream->set_UI16( $num )
-
符号なし2バイト整数を書き込みます。
- $stream->set_SI16( $num )
-
符号つき2バイト整数を書き込みます。
- $stream->set_UI32( $num )
-
符号なし4バイト整数を書き込みます。
- $stream->set_SI32( $num )
-
符号つき4バイト整数を書き込みます。
- $stream->set_bits( $num, $nbits )
-
$numを$nbits長の符号なし整数として書き込みます。
- $stream->set_sbits( $num, $nbits )
-
$numを$nbits長の符号つき整数として書き込みます。
- $stream->set_bits_list( $nbitsbit, @list )
-
@listを、符号なし整数のビットリストとして書き込みます。 @list中の数を表現できる最小のビット数(nbits)を求め、それを $nbitsbit長の符号なし整数としてまず書き込みます。 その後、@listの数をそれぞれnbits長の符号なし整数として書き込みます。
- $stream->set_sbits_list( $nbitsbit, @list )
-
@listを、符号つき整数のビットリストとして書き込みます。 @list中の数を表現できる最小のビット数(nbits)を求め、それを $nbitsbit長の符号なし整数としてまず書き込みます。 その後、@listの数をそれぞれnbits長の符号つき整数として書き込みます。
UTILITY FUNCTIONS¶
- &SWF::BinStream::Write::get_maxbits_of_bits_list( @list )
- &SWF::BinStream::Write::get_maxbits_of_sbits_list( @list )
-
@list中の数を表現できる最小のビット数を求めます。 -_bits_listが符号なし用、-_sbits_listが符号つき用です。
コピーライト¶
Copyright 2000 Yasuhiro Sasama (ySas), <ysas@nmt.ne.jp>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
翻訳者¶
笹間康弘 (ysas@nmt.ne.jp)