簡體   English   中英

將前萬行數據文件寫入新文件的最快方法

[英]Fastest way of writing the first 10 000 lines of data file to new file

我想要一個hyuuge(.csv)文件的前一萬行。

天真的方法

1)創建讀者和作家

2)讀取原始文件行

3)將前一萬行寫入新文件

不能最快,可以嗎?

這將是我應用程序中的常見操作,因此我對速度略有擔心,但也很好奇。

謝謝。

有幾種在Java中進行快速 I / O的方法,但是如果沒有針對您的特定情況進行基准測試,則很難找到一個數字/建議。 您可以通過以下幾種方法進行基准測試:

  • 帶緩沖的讀取器/寫入器,緩沖區大小可能有所不同
  • 讀取內存中的整個文件(如果可以的話),然后進行內存中拆分,一次完成所有寫入操作
  • 使用NIO文件API讀取/寫入文件(查看通道)

如果您只想讀/寫10,000行左右:

  • 與讀取/寫入文件相比,啟動新的JVM可能會花費更長的時間,
  • 讀/寫時間應該是幾分之一秒...天真地做到這一點,並且
  • 從復制算法提高整體速度似乎不值得。

話雖這么說,您比使用BufferedReader.readLine()或每次讀取一行更好。

  • 根據文件的字符編碼,通過使用具有大緩沖區大小的BufferedInputStream和BufferedOutputStream進行按字節I / O,可以獲得更好的性能。 只需編寫一個循環以讀取一個字節,有條件地更新行計數器並寫入該字節...直到復制了必要的行數。 (這假定您可以通過檢查字節來檢測CR和/或LF字符。對於我所知道的所有字符編碼都是如此。)

  • 如果您使用NIO和ByteBuffers,則可以進一步減少內存中的復制數量,盡管CR / LF計數邏輯會更復雜。

但是您應該問的第一個問題是,是否值得為此進行優化。

線長相同嗎? 如果是這樣,則可以使用RandomAccessFile讀取x字節,然后將這些字節寫入新文件。 但是,這可能會占用大量內存。 我懷疑這樣做會更快,但可能值得進行基准測試。 此解決方案僅適用於定長線

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM