簡體   English   中英

Java 文件 stream 的 byte[] 與 char[] 的性能

[英]Java performance of byte[] vs. char[] for file stream

我正在編寫一個讀取文件的程序(使用自定義緩沖區,8KB),然后在該緩沖區中找到一個關鍵字。 由於 Java 提供了兩種類型的流:字符和字節,我已經使用byte[]char[]來實現這個緩沖。

我只是想知道,這對性能來說會更快更好,因為char是 2 byte ,當使用Reader讀取char[]時, Reader將執行從byte轉換回char ,我認為這可能會比使用更慢只有byte[]

使用字節數組會更快:

  • 您沒有字節到字符解碼步驟,這至少是一個復制循環,並且可能更多取決於用於進行解碼的字符集。

  • 字節數組將占用更少的空間,從而節省 GC / 初始化中的 CPU 周期。

然而:

  • 除非您正在搜索大文件,否則差異不大。

  • 如果輸入文件未以 8 位字符集編碼,則字節數組方法可能會失敗。 即使它有效(就像 UTF-8 和 UTF-16 一樣),跨越緩沖區邊界的匹配字符也存在潛在問題。

(按字節處理對 UTF-8 和 UTF-16 起作用的原因是編碼可以很容易地區分第一個單元(字節或短)和編碼字符的后續單元。)

如果它是您正在閱讀的二進制文件,請使用字節數組。

如果它是一個文本文件,並且您稍后將使用字符串等內容,那么您應該使用 char 數組。

這個堆棧溢出問題file-streaming-in-java討論了在 java 中有效地流式傳輸文件。

我特別喜歡這篇參考文章

在大文件上,您很快就獲得了僅使用字節的速度優勢,因此如果您可以通過字節解碼模式,您肯定可以獲得一些寶貴的周期。

如果您的文件很小,或者您沒有那么多文件,那么可能不值得麻煩。

暫無
暫無

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

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