我在一些将文件/ 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