如果我想一個src文件的內容附加到在Ruby DEST文件的末尾,是它更好地使用:紅寶石File.read與File.gets
while line = src.gets do
或
while buffer = src.read(1024)
我見過使用和想知道什麼時候應該使用每種方法,爲什麼?
如果我想一個src文件的內容附加到在Ruby DEST文件的末尾,是它更好地使用:紅寶石File.read與File.gets
while line = src.gets do
或
while buffer = src.read(1024)
我見過使用和想知道什麼時候應該使用每種方法,爲什麼?
一個用於讀取「行」,一個用於讀取n字節。
雖然字節緩衝可能會更快,但很多可能會消失到操作系統,可能會緩衝無論如何。海事組織它有更多的與讀取的上下文 - 你想要線,或者你只是洗牌大量的數據?
也就是說,在您的特定環境中進行性能測試時可能會有所幫助。
gets
將讀到線的基礎上分隔
read
年底將在同一時間
這一切都取決於你想讀什麼讀n個字節。
如果您的src文件具有不可預知的行長度,使用read
可能更有效。
閱讀適合不同情況的文件時,您有許多選項。
讀取文件行由行,但只能存儲一條線路在同一時間:
while (line = file.gets) do
# ...
end
讀取文件中的所有行一次:
file.readlines.each do |line|
# ...
end
讀取文件在一系列的塊:
while (data = file.read(block_size))
# ...
end
閱讀在整個文件一次:
data = file.read
這實際上取決於您正在使用哪種數據。通常,read
更適合用於二進制文件,或者您希望將其作爲一個大字符串的文件。 gets
和readlines
是相似的,但readlines
更方便,如果您確信該文件適合內存。不要在多GB的日誌文件上執行此操作,否則在系統開始交換時您將處於一個受到傷害的世界。對於這種情況,請使用gets
。
感謝戴夫,我更「洗牌或數據」,並不一定關心線條。我關心的表現。我可能會閱讀,這在這種情況下似乎更合適。謝謝你的幫助! – Tamar 2012-04-04 18:10:31