我将文件封装在一个更大的文件中(类似于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
?答案 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
这样的内容是否会混淆其内部。