2012-04-04 62 views
1

如果我想一個src文件的內容附加到在Ruby DEST文件的末尾,是它更好地使用:紅寶石File.read與File.gets

while line = src.gets do 

while buffer = src.read(1024) 

我見過使用和想知道什麼時候應該使用每種方法,爲什麼?

回答

7

一個用於讀取「行」,一個用於讀取n字節。

雖然字節緩衝可能會更快,但很多可能會消失到操作系統,可能會緩衝無論如何。海事組織它有更多的與讀取的上下文 - 你想要線,或者你只是洗牌大量的數據?

也就是說,在您的特定環境中進行性能測試時可能會有所幫助。

+0

感謝戴夫,我更「洗牌或數據」,並不一定關心線條。我關心的表現。我可能會閱讀,這在這種情況下似乎更合適。謝謝你的幫助! – Tamar 2012-04-04 18:10:31

2

gets將讀到線的基礎上分隔

read年底將在同一時間

這一切都取決於你想讀什麼讀n個字節。

如果您的src文件具有不可預知的行長度,使用read可能更有效。

5

閱讀適合不同情況的文件時,您有許多選項。

讀取文件行由行,但只能存儲一條線路在同一時間:

while (line = file.gets) do 
    # ... 
end 

讀取文件中的所有行一次:

file.readlines.each do |line| 
    # ... 
end 

讀取文件在一系列的塊:

while (data = file.read(block_size)) 
    # ... 
end 

閱讀在整個文件一次:

data = file.read 

這實際上取決於您正在使用哪種數據。通常,read更適合用於二進制文件,或者您希望將其作爲一個大字符串的文件。 getsreadlines是相似的,但readlines更方便,如果您確信該文件適合內存。不要在多GB的日誌文件上執行此操作,否則在系統開始交換時您將處於一個受到傷害的世界。對於這種情況,請使用gets