RubyのStringIOっていつ使うの?
StringIOはオブジェクトに溜め込むことができます。
StringIOは文字列をファイルのように扱うこともできます。
□StringIOのメソッド
- .readメソッド
- .writeメソッド
StringIOのファイルポインタってなに?
ioクラスにもStringIOクラスにもファイルポインタという概念があります。

上の画像はファイルポインタを示した画像です。ファイルポインタとは文字のところで点滅しているやつのことを言っています。RubyのStringIOを使うとこのファイルポインタをプログラムで操作できるというわけです。
readしたときもwriteしときもファイルポインタが動きます。sio.readしたあとにsio.readすると何も表示されなくなります。ですのでrewindというメソッドで先頭に戻してやる必要があります。
require "stringio"
sio = StringIO.new("taguti,fkoji")
p sio.read#stringioを読みこむ。 readlinesは使えない
p sio.rewind#ファイルポインタを先頭に戻す
p sio.write("hello!")#こちらを書きおえたときにはファイルポインタは書き終えた位置にいる
p sio.rewind#ファイルポインタを先頭に戻す
p sio.read#先頭にした状態で読み込むことで正常に読み込むことができるStringIOがいつ役に立つのかという点についてですが、わたしもよくわかりませんでした。
ruby の net-scp で 6204 byte までしかアップロード出来ないのは理由はわからないけど StringIO オブジェクトを先に作ってあげてオンメモリのデータをアップするようにしたら回避できた。しかし何なんやろ?
— ハシビロコウ (@yalab) May 17, 2015
Rubyで、10kb以下のファイルをopen-uriでopenするとTempfileじゃなくてStringIOが返すようにしてるのはどういう意図があるのだろうか。
— ユウキ (@yukiyan_w) March 3, 2015

コメント