我需要在內存中保存大量的字符串對象(數百MB),並且我想將它們保存爲UTF-8格式,因爲在大多數情況下,它將需要一半的內存作爲默認實現使用。
默認的String類需要12個字符的字符串60個字節(請參閱http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.html)。
我的大部分字符串都是10-20個字符。
我不知道是否有一些開源的庫提供這種字符串的包裝?
我知道如何將字符串轉換爲UTF-8字節數組,但我正在尋找一個包裝類,它將提供所有需要的工具函數(哈希,等於,toString,fromString等)。用於java的UTF-8字符串類
6
A
回答
2
的Apache Avro公司有它實現CharSequence
的UTF8 wrapper class,但我不知道這樣的對象
Hadoop的具有頗有些種類的接口的Text class你的願望
0
如果你想有一個爲每個字符串創建不同的對象,並且希望它們儘可能緊湊,然後使用字節數組。這將是每字符1字節對2,並且你將不會有字符串標題的開銷(這可能增加每個對象32字節)。
但是,當然如果不首先轉換爲字符串,您將無法使用這些字符串方法。
但是,如果您真的想節省空間,請將字符串背靠背地存儲在幾個較大的數組中,並使用「dope vectors」來查找單個字符串。
相關問題
- 1. 的java utf8編碼 - 字符,字符串類型
- 2. 字符串或characterAt UTF8字符串與2個字節的字符在JAVA
- 3. 字符串限制字 - UTF8
- 4. 用於UTF8字母的JAVA比較器
- 5. 獲取UTF8字符串
- 6. iOS:解碼utf8字符串
- 7. libpqxx postgresql utf8字符串
- 8. mb_strtolower和UTF8字符串
- 9. iphone xml-rpc utf8字符串
- 10. 編碼字符串UTF8
- 11. UTF8字符串長度
- 12. UTF8編碼問題使用Netbeans的Java字符串
- 13. 的java getConstructor(字符串[]類)
- 14. C++字符串到UTF8有效字符串使用utf8proc
- 15. 在C中使用utf8字符串
- 16. 用於Java中大字符串的唯一字符串對象
- 17. 用於字符串長度的Java NPE
- 18. 如何將類似utf8的字符串轉換爲真正的utf8?
- 19. 使用C#向UTF8插入UTF8字符串
- 20. 用於日期類的Java中的字符串格式化
- 21. Java字符串不等於
- 22. Java字符串等於
- 23. 流到UTF8字符串,沒有字節[]
- 24. 將字節[]轉換爲UTF8字符串
- 25. UTF8字節到字符串和Winsock GetStream
- 26. 將字符串轉換爲utf8字節
- 27. 是否有用於UTF8字符的分隔符字節?
- 28. 爲什麼Kickstarter將「utf8 = [Unicode字符]」應用於查詢字符串?
- 29. MapReduce與Java中的Avro:字符串與CharSequence與Utf8數據類型
- 30. 獲取UTF8中字符串的長度
http://docs.oracle.com/javase/tutorial/i18n/text/string.html – Doorknob
Java以UTF-16內部存儲所有字符串,因此12個字符的字符串在內部爲24個字節。不計算強制性對象開銷,這個60字節的數字來自哪裏? – fge
...最少24個字節,因爲UTF編碼是可變長度的(授予,在OP的示例中,您必須使用一些嚴重異域字符超過24個字節) –