我想要一個hyuuge(.csv)文件的前一萬行。將最初的10000行數據文件寫入新文件的最快方法
的
1天真的樣子)創建讀者&作家
2)閱讀線
3原始文件行)第一一萬行寫入到一個新的文件
不能是最快的,可以嗎?
這將是我的應用程序中的一個常見操作,所以我對速度略有擔心,但也只是好奇。
謝謝。
我想要一個hyuuge(.csv)文件的前一萬行。將最初的10000行數據文件寫入新文件的最快方法
的
1天真的樣子)創建讀者&作家
2)閱讀線
3原始文件行)第一一萬行寫入到一個新的文件
不能是最快的,可以嗎?
這將是我的應用程序中的一個常見操作,所以我對速度略有擔心,但也只是好奇。
謝謝。
有幾種方法可以做快速 Java中的I/O,但沒有針對您的特定情況進行基準測試,這很難拍出數字/建議。這裏有幾個方法,你可以嘗試標杆:
啊,所以這不是一個硬性答案,也不是一個問題 - 希望它仍然適用。 Upvote,但至少等待24小時才能接受。 –
@ The Unfun貓:不幸的是。另外,由於數據的面向行的特性(即文本數據而不是二進制文件),使用先進的文件I/O優化可能有點難以應用,因爲它們依賴於讀取固定大小的數據(緩衝區大小)底層的來源。 –
+1如果你有一個硬盤,限制可以從磁盤讀取文件的速度有多快,所以你做什麼並不重要。如果您正在從SSD或磁盤緩存讀取數據,則可以使用其他方法查看相對的改進。 –
是線的長度相同。如果是這樣,您可以使用RandomAccessFile讀取x個字節,然後將這些字節寫入新文件。儘管如此,這可能會讓你記憶猶新。我懷疑這會更快,但可能值得進行基準測試。這個解決方案只能用於固定長度的線
如果你只想讀/寫1萬行左右:
話雖如此,你可以做的比一次使用BufferedReader.readLine()
或其他什麼時候讀一行更好。
根據文件的字符編碼,您將獲得由具有的BufferedInputStream和的BufferedOutputStream大緩衝區大小做字節爲單位的I/O性能更好。只需編寫一個循環來讀取一個字節,有條件地更新行計數器並寫入字節......直到您複製了必需的行數。 (假設你可以通過檢查字節來檢測CR和/或LF字符,對於我所知道的所有字符編碼都是如此)。
如果你使用NIO和ByteBuffers,你可以進一步減少內存複製,但CR/LF計數邏輯將更加複雜。
但是你應該問的第一個問題是,是否值得這樣做是值得的優化。
*最快*方式*是*使用'BufferedReader'讀取數據流,並通過'StringBuffer'附加'strings'。 – adatapost
@AVD:我想你的意思是'StringBuilder'; 'StringBuffer'被同步。 –