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

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

成都创新互联网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站设计、成都做网站易于使用并且具有良好的响应性。

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

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

 
 
 
  1. # Create a file (in binary mode)   
  2. File.open("myfile","wb")
     {|f| f.syswrite("12345\0326789\r") }   
  3. # Above note the embedded 
    octal 032 (^Z)   
  4. # Read it as binary   
  5. str = nil   
  6.    
  7. File.open("myfile","rb") 
    {|f| str = f.sysread(15) }   
  8. puts str.size# 11   
  9. # Read it as text   
  10. str = nil   
  11. File.open("myfile","r") 
    {|f| str = f.sysread(15) }   
  12. puts str.size# 5 

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

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

 
 
 
  1. # Input file contains a 
    single line: Line 1.   
  2. file = File.open("data")   
  3. line = file.readline # 
    "Line 1.\n"   
  4. puts "#{line.size} characters." 
    # 8 characters   
  5. file.close   
  6. file = File.open("data","rb")   
  7. line = file.readline # "Line 1.\r\n"   
  8. puts "#{line.size} characters."
     # 9 characters 
    二进制模式的结尾是一个回车换行对.   
  9. file.close 

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

 
 
 
  1. file = File.open("data")   
  2. file.binmode   
  3. line = file.readline 
    # "Line 1.\r\n"   
  4. puts "#{line.size} 
    characters." # 9 characters   
  5. file.close 

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

 
 
 
  1. input = File.new
    ("myfile",'a+')   
  2. output = File.new
    ("outfile",'a+')   
  3. instr = input.sysread(10);   
  4. puts instr   
  5. bytes = output.syswrite
    ("This is a test.") 

如果文件指针已经到达文件的结尾时,sysread方法将会抛出一个异常.

这边要注意 Array 的pack和string的unpack方法,对于Ruby操作二进制文件非常有用.

本文标题:分享Ruby操作二进制文件技巧
路径分享:http://www.hantingmc.com/qtweb/news36/27436.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联