Rubyでフォーマットのあるバイナリを読み込む場合、String#unpackを使うのがよくあるパターン。とはいえ使いづらい点もあって
- フォーマット文字列が長さ情報を持っているのに、何バイト読んだかの情報が取れない
- unpack自体はデータを消費しないので、次のデータを読もうとすると自分で進めないといけない
これで、例えばデータ自体の内容によってフォーマットが切り替わるようなデータを処理しようとすると、フォーマットから長さを計算して固定長切り出してフォーマットに従ってunpackして……という鉄板コードが並ぶことに。
やってられないので、こんなのを考えてみた。
unpackした結果をpackし直して長さを求めるという手抜きかつ富豪な実装だけど、これだけでデータ処理コード自体の見通しはだいぶ良くなったりする。
0 件のコメント:
コメントを投稿