IO对象仅用于文件的一部分

时间:2016-10-06 18:53:07

标签: ruby object io

我将文件封装在一个更大的文件中(类似于TAR file),我希望能够使用IO methods轻松访问它。

例如,如果我有一个3 KiB文件,我想有一个只代表中间1 KiB的对象,所以我可以如下:

middle.size      #=> 1024
middle.rewind
middle.pos       #=> 0
middle.read.size #=> 1024
middle.pos       #=> 1024
  • 我应该以某种方式扩展IO课吗?
  • 我应该创建一个继承自IO的新类吗?
  • 在实例化IO
  • 之前,我可以伪造中间文件作为文件吗?

1 个答案:

答案 0 :(得分:1)

你的第三个选择,"伪造中间",被称为代理或包装,这通常是最简单的方法。您可以模拟IO方法,但实际上是根据偏移值调整了所有内容。

例如:

const

您也可以将文件子类化,但我不确定重新定义像class OffsetIO def initialize(name, options = nil) options ||= { } @offset = (options[:offset] || 0).to_i @file = File.open(name, options) end # Example method that applies an offset def rewind @file.seek(@offset) end def seek(offset) @file.seek(offset + @offset) end def method_missing(*args) @file.send(*args) end end 这样的内容是否会混淆其内部。