我正在爲二進制數據開發基於Java的下載程序。該數據通過基於文本的協議(UU編碼)傳輸。對於聯網任務,使用netty庫。二進制數據被服務器分成幾千個小數據包併發送到客戶端(即Java應用程序)。Java:字符串的更快替代方法(字節[])
從netty每次收到新消息(數據)時,都會收到一個ChannelBuffer
對象。現在我需要處理這些數據,除了需要檢查來自服務器的包的頭部之外,還需要執行其他任務(如HTTP狀態行)。爲此,我請撥打ChannelBuffer.array()
以獲得byte[]
陣列。然後,我可以通過new String(byte[])
將該數組轉換爲字符串,並輕鬆檢查(例如比較)其內容(再次,就像比較HTTP中的「200」狀態消息)。
我寫的軟件是使用多個線程/連接,以便我並行地從netty接收多個數據包。
這通常工作正常,但是,在分析應用程序時,我注意到當與服務器的連接良好且數據進入速度非常快時,對String
對象的轉換似乎是一個瓶頸。在這種情況下,CPU使用率接近100%,根據分析器花費的大量時間調用此構造函數String(byte[])
。
我搜索了一個更好的方法,從ChannelBuffer
到String
,並注意到前者也有一個toString()
方法。但是,該方法甚至比構造函數更慢。
所以我的問題是:你們有沒有人知道一個更好的選擇,以實現我在做什麼?
爲什麼?只需發送字節,儘可能快。忘記編碼;忘記分裂。 TCP已經分裂,並且它比當前知道更多關於當前連接的最佳數據包大小。 – EJP