我在一些將文件/ IO作爲參數的ruby代碼中使用了一個不透明的API。我希望能夠傳遞一個IO對象,它只能訪問實際IO對象中給定範圍的數據。如何使用滑動窗口過濾器打包ruby IO
例如,我有一個8GB的文件,我想給api一個在我的真實文件中間有1GB範圍的IO對象。
real_file = File.new('my-big-file')
offset = 1 * 2**30 # start 1 GB into it
length = 1 * 2**30 # end 1 GB after start
filter = IOFilter.new(real_file, offset, length)
# The api only sees the 1GB of data in the middle
opaque_api(filter)
的filter_io項目看起來是最容易適應做到這一點,但似乎並沒有直接支持這種使用情況。
我相信你在這裏做的只是傳遞一個字符串(讀取返回一個字符串/數據被分配給塊,而不是IO類的一個實例),直到incr_digest,除非我失去了一些東西......? – wr0ngway 2011-06-17 17:43:48
不,你是對的,這正是它所做的。我的錯。但是,似乎你可以將它作爲一個優化的工具來分塊數據,然後將它作爲IO對象發送給你的API ... 我正在尋找具有該功能的StringIO。 http://ruby-doc.org/stdlib/libdoc/stringio/rdoc/index.html – Ryanmt 2011-06-20 04:32:24