2012-03-27 29 views
3

有誰知道我在哪裏可以找到該算法?它需要一個double和StringBuilder,並將該double添加到StringBuilder 而不創建任何對象或垃圾。當然,我不是在尋找:將double轉換爲Java中的char數組(不使用Double.toString或StringBuilder之類的對象)的算法?

sb.append(Double.toString(myDouble)); 

// or 

sb.append(myDouble); 

我試圖圍繞Java的源代碼戳(我相信它確實它在某種程度上),但我看不到代碼/邏輯足夠清晰的任何塊被重新使用。

+0

爲什麼'sb.append(myDouble);'不做你要找的東西? – Jesper 2012-03-27 07:00:39

+0

@Jesper它創造了不少對象。 – 2012-03-27 07:04:10

+0

如果Java源代碼「以某種方式執行」,那麼爲什麼相同的Java源代碼在'StringBuilder.append(double)'中沒有使用相同的技術?如果你擁有它,似乎不會使用這種最佳技術。這導致我懷疑他們沒有那個代碼,或者它*不是最優的,至少在你的JVM實現者看來是這樣。 – 2012-03-27 08:45:43

回答

6

我已經寫了這個ByteBuffer。你應該能夠適應它。將它寫入一個直接的ByteBuffer可以讓你不必將其轉換爲字節或將其複製到「本地」空間。

public ByteStringAppender append(double d)

如果你正在登錄這一個文件,你可以使用全庫,因爲它可以寫入每秒持續約2000萬雙。在寫入內存映射文件時,它可以在不進行系統調用的情況下執行此操作。

+1

有趣的項目,彼得! – Jesper 2012-03-27 07:15:18

+0

嚇人真棒! – chrisapotek 2012-03-27 07:37:37

+0

順便說一句:它產生的字符串可能比內建的字符串短。 (以數字爲單位)這是因爲它會檢查它所寫入的值是否與雙精度值具有相同的表示形式,而內置函數有時會謹慎地添加額外的數字。 – 2012-03-27 08:59:57

相關問題