[英]What's the difference Between Character Stream and Byte Stream in Java and Char vs Byte in C?
[英]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.