世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2012年08月03日

指定バイト数ぐらいの長さの文字列を読み込む方法

IOから指定したバイト数以内の長さを読み込みたいが、多バイト文字の途中で切れてしまうのは嬉しくないのでそういうときはもう少し読む、というような処理を書きたいことがよくある。 これ、というメソッドは見当たらないので仕方がないから自前でバッファリングしたりしてなんとかしていたのだけど、IO#getsにそういう機能があることが分かった。

IO#getsはseparatorにnilを指定するとseparateせずにファイルの最後まで読む。それからもう1つ、読み込むバイト数の上限を指定できる。この上限指定は1.9ではもちろん多バイト文字を壊さないようになっている。だからこれらを組み合わせてio.gets(nil, limit)とすると希望の動作をする。行操作でもないのにgetsというのはちょっと思いつかないね。

余談

なぜ突然こんなのに気づいたのかというと、今書いているライブラリの関係でIOの挙動を細かくみているのだ。

IOクラスはもともと結構大きなクラスだったのだが、Ruby 1.9になってM17Nが入ったためにエンコーディングがらみでさらに挙動が複雑になった。もはやStringIOみたいに自前でIOもどきのクラスを書くのは容易ではない。そこでIOもどきを作るのを助けるIOableというライブラリを書いている。

トラックバック

http://yugui.jp/articles/871/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system