Tôi cần giữ nhiều đối tượng chuỗi trong bộ nhớ (hàng trăm MB) và tôi muốn giữ chúng ở định dạng UTF-8 vì trong hầu hết các trường hợp, nó sẽ yêu cầu một nửa bộ nhớ sử dụng.
Lớp Chuỗi mặc định yêu cầu chuỗi 12 ký tự 60 byte (Xem http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.html).
Hầu hết các chuỗi của tôi dài từ 10-20 ký tự.
Tôi tự hỏi liệu có một số thư viện nguồn mở cung cấp trình bao bọc cho các chuỗi như vậy không?
Tôi biết cách chuyển đổi chuỗi thành mảng byte UTF-8 nhưng tôi đang tìm lớp bao bọc sẽ cung cấp tất cả các hàm tiện ích cần thiết (Hash, Equal, toString, fromString, v.v.).UTF-8 Chuỗi lớp cho java
6
A
Trả lời
2
Apache Avro có UTF8 wrapper class mà thực hiện CharSequence
, nhưng tôi không biết mức tiêu thụ bộ nhớ của các đối tượng như vậy
Hadoop có Text class trong đó có khá các loại giao diện mà bạn mong muốn
0
Nếu bạn muốn có một đối tượng riêng biệt cho mỗi chuỗi và bạn muốn chúng càng nhỏ gọn càng tốt, sau đó sử dụng mảng byte. Điều đó sẽ là 1 byte cho mỗi char so với 2, và bạn sẽ không có phí trên đầu trang String (có thể thêm 32 byte cho mỗi đối tượng).
Nhưng tất nhiên bạn sẽ không thể sử dụng bất kỳ phương thức String nào trên các phương thức này mà không chuyển đổi thành Chuỗi trước tiên.
Nhưng nếu bạn thực sự muốn tiết kiệm dung lượng, hãy lưu trữ chuỗi ngược lại trong một vài mảng lớn hơn, với "vectơ dope" để định vị các chuỗi riêng lẻ.
Các vấn đề liên quan
- 1. Giải mã chuỗi Java BASE64 utf8
- 2. Chuỗi con hoặc phương thức CharacterAt cho chuỗi UTF8 có 2+ byte trong JAVA
- 3. Java + Mysql UTF8 Vấn đề
- 4. java: cách chuyển đổi tệp thành utf8
- 5. C#: Chuyển đổi byte [] thành chuỗi được mã hóa UTF8
- 6. Làm thế nào để cắt ngắn chuỗi UTF8 trong PHP?
- 7. Chuyển đổi chuỗi UTF8 thành ASCII trong Perl
- 8. C# UTF8 Đọc/Xuất
- 9. Làm cách nào để chuyển đổi chuỗi thành UTF8?
- 10. Chuyển đổi chuỗi UTF8 vào giá trị số trong Perl
- 11. Cách chuyển đổi chuỗi thành UTF8 trong Ruby
- 12. Làm thế nào để giao dịch SWIG với chuỗi utf8 trong C#?
- 13. Xử lý UTF8 ở C
- 14. android cách sử dụng tài nguyên chuỗi trong lớp java
- 15. Trích xuất các chuỗi từ các lớp Java
- 16. Công cụ phụ thuộc lớp cho Java
- 17. Lớp tương thích Java ME cho Android
- 18. Java hashCode cho một lớp Point
- 19. mã gốc cho lớp Java Toán
- 20. OOP trong Java: Lớp thừa kế với phương pháp chuỗi
- 21. Cách chuyển đổi loại Chuỗi thành loại Lớp trong java
- 22. Java isEmpty() không xác định cho chuỗi?
- 23. Java: quét chuỗi cho một mẫu
- 24. PHP preg_split utf8 characters
- 25. Ký hiệu UTF8 cho các chữ cái chỉ số
- 26. Cách sử dụng regex cho utf8 trong ruby
- 27. Tạo chuỗi lớp tùy chỉnh
- 28. Làm thế nào để hiển thị UTF8 trong Netbeans 7?
- 29. Một lớp lót để đếm số lần xuất hiện của chuỗi trong một chuỗi [] trong Java?
- 30. Đọc các chuỗi UTF8 từ một máy chủ thông qua http sử dụng MIDP
http://docs.oracle.com/javase/tutorial/i18n/text/string.html – Doorknob
Java lưu trữ tất cả các chuỗi nội bộ trong UTF-16, vì vậy bạn 12 chuỗi ký tự là 24 byte nội bộ. Không tính phí đối tượng bắt buộc, con số 60 byte đó đến từ đâu? – fge
... tối thiểu 24 byte, vì mã hóa UTF có độ dài thay đổi (được cấp, bạn phải sử dụng một số ký tự kỳ lạ nghiêm trọng vượt quá 24 byte trong ví dụ của OP) –