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

开发 开发工具
Ruby操作二进制文件对于一个经验丰富的编程人员来说是非常方便易学的一个操作方法。不过在windows下的Ruby操作二进制文件方法却有些不同。

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

可是在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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

这边注意,这些代码都是在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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

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

 

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

如果你想使用更底层的输入输出,那你可以选择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.") 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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

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

责任编辑:曹凯 来源: ddvip.com
相关推荐

2009-12-16 11:04:51

Ruby操作文件权限

2009-11-02 11:27:42

VB.NET二进制文件

2017-04-11 10:48:53

JS二进制

2009-08-12 18:06:53

C#读取二进制文件

2013-04-28 15:37:35

JBoss

2024-02-01 09:04:12

2009-12-10 09:24:50

PHP函数fwrite

2023-09-18 23:50:25

二进制文件裁剪Layout

2020-05-22 18:00:26

Go二进制文件编程语言

2023-12-26 15:10:00

处理二进制文件

2018-10-22 14:37:16

二进制数据存储

2009-02-27 09:37:33

Google二进制代码

2022-10-31 08:02:42

二进制计算乘法

2022-07-26 13:00:01

安全符号源代码

2009-12-16 10:10:16

Ruby打开关闭文件

2009-12-15 10:23:23

Ruby应用技巧

2010-10-13 15:45:23

MySQL二进制日志

2010-06-09 13:02:29

MySQL启用二进制日

2017-12-21 10:52:52

nginx日志还原

2024-10-30 09:50:51

WebGo语言
点赞
收藏

51CTO技术栈公众号