6.11. Swobodne nawigowanie po „jednokrotnie odczytywalnych” strumieniach wejściowych

Problem

Mamy obiekt wejścia-wyjścia — prawdopodobnie Socket — nieobsługujący metod dostępu swobodnego (seek, pos=, rewind itp.). Chcemy potraktować go jak plik dyskowy, po którego zawartości można się swobodnie przemieszczać.

Rozwiązanie

Najprostszym rozwiązaniem jest wczytanie strumienia (lub jego interesującego fragmentu) do pamięci jako obiektu StringIO. Obiekt taki zachowuje się dokładnie tak jak plik.

require 'socket' require 'stringio' sock = TCPSocket.open("www.example.com", 80) sock.write("GET /\n") file = StringIO.new(sock.read) file.read(10) # => "<HTML>\r\n<H" file.rewind file.read(10) # => "<HTML>\r\n<H" file.pos = 90 file.read(15) # => ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.