此代码:
io = StringIO.new "\xAF"
puts "\xAF".unpack('C')
puts (io.read 1).unpack('C')
puts 'Unequal' if io.read(1) != "\xAF"
打印:
175
175
Unequal
为什么两个字符串在通过StringIO
时不相等?显然,它们都对应于值175,但不知何故它们并不相等。
答案 0 :(得分:3)
文件对象(包括StringIO
)有一个文件指针。一旦读取/写入文件,文件指针就会前进。
io = StringIO.new "\xAF"
io.read(1)
# => "\xAF"
io.read(1) # File pointer advance. reached EOF. No more character.
# => nil
如果您想重新阅读该字符,请使用seek
方法:
io.seek(0) # Move to offset 0
io.read(1)
# => "\xAF"