分享Ruby操作二进制文件技巧

diyinqian 2009-12-16

在Ruby语言中,利用字符串保存二进制文件已经是一个非常方便的步骤了。那么具体的操作方法优势怎样的呢?下面我们就一起来看看Ruby操作二进制文件相关技巧介绍。

可是在windows下是例外,在他下面,Ruby操作二进制文件和文本文件的不同是,在二进制mode下,结束行不能被转义为一个单独的换行,而是被保存为一个回车换行对.

另外的不同是,在文本模式下 control-Z被作为文件的结束:

# Create a file (in binary mode)   


File.open("myfile","wb")
 {|f| f.syswrite("12345\0326789\r") }   


# Above note the embedded 
octal 032 (^Z)   


# Read it as binary   


str = nil   


   


File.open("myfile","rb") 
{|f| str = f.sysread(15) }   


puts str.size# 11   


# Read it as text   


str = nil   


File.open("myfile","r") 
{|f| str = f.sysread(15) }   


puts str.size# 5 

这边注意,这些代码都是在windows下才会打印出后面的结果,如果是在linux两处都会打印出11.

再看下面的Ruby操作二进制文件代码:

# Input file contains a 
single line: Line 1.   


file = File.open("data")   


line = file.readline # 
"Line 1.\n"   


puts "#{line.size} characters." 
# 8 characters   


file.close   


file = File.open("data","rb")   


line = file.readline # "Line 1.\r\n"   


puts "#{line.size} characters."
 # 9 characters 
二进制模式的结尾是一个回车换行对.   


file.close 

binmode方法能够转换当前的流为二进制模式,这边要注意的是,一旦切换过去,就不能切换回来了:

file = File.open("data")   


file.binmode   


line = file.readline 
# "Line 1.\r\n"   


puts "#{line.size} 
characters." # 9 characters   


file.close 

如果你想使用更底层的输入输出,那你可以选择sysread和syswrite方法,他们接受一定数量的字节作为参数 .

input = File.new
("myfile",'a+')   


output = File.new
("outfile",'a+')   


instr = input.sysread(10);   


puts instr   


bytes = output.syswrite
("This is a test.") 

相关推荐