-
-
Notifications
You must be signed in to change notification settings - Fork 0
Packet
新しいデータのかたち
基本的なデータは配列やファイルに格納されています。
JavaではInputStream / OutputStream と Reader / Writer で入出力があります。 ただ、Parserなどをつくるときには必要なところまで読んで、失敗したら戻って、などをくり返したいのですが読んでしまうと戻しにくい、など問題もあります。 大きい配列を用意しても最終的に足りなくなったりしたときに面倒なことになります。 テキストエディタなどをつくるときにもそういうような構造になるんじゃないかと思います。 データ構造をもう少しふわっと扱いたくなったので、先にデータ領域を用意するのではなく、必要に応じて継ぎ接ぎできればいいんじゃないかとFIFO、LIFOなど扱えるようなものをとりあえず組んでみたところ、使いやすそうなのでSoftLibの中核機能として育ててみました。 通常のInputStream, OutputStream が繋がったような構造で、書き込んだものがbyte配列と同じように保存され、読み込まれたところから消えていきます。 細かい配列を繋いで使える、というような感覚でもいいかもしれません。
Top point Last
-------------------------------------
| |InputStream OutputStream|
| |Read 読み データ |Write 追加
ファイルの構造
Top Last
----------------------------
|FrontPacket BackPacket|
|Read 読み データ |Write 追加
逆書き BackWrite | ← 逆読みBackRead|
Packet の構造
読んだところから消えるため、常に point が Top の位置です。 戻りたい場合は読んだデータを書くことで戻すことができます。
Packet は 2つの Stream と 2つの 逆Stream を配列の前後につけたような構造です 先頭をFrontPacket, 末尾をBackPacket として扱うことができます。 それぞれInputStream, OutputStream っぽいことができます。
- データを細切れに受け取って、まとめてから使いたいときの入れ物として
- 処理サイズが不明なものをとりあえずParseなどしたいとき
FileにもFrontPacketを付けることができます。これは読み込みながら要らない部分を戻したりしたいときに使います 配列にもFrontPacket, BackPacketを付けることもできます。Block として別にまとめています。