2015-11-10 12 views
8

Lên đến jdk7u6 phương thức chuỗi con was lightning fast vì nó chỉ sử dụng con trỏ trong chuỗi hiện có - do đó không yêu cầu sao chép bộ nhớ. Tôi đã sử dụng tính năng đó một cách rộng rãi trong việc triển khai các trình phân tích cú pháp.Giải pháp thay đổi hành vi jdk6 thành jdk7 của chuỗi con

Với khoảng thời gian kể từ khi tính năng hiệu suất quan trọng đó bị xóa, phải có một số thay thế được bôi trơn tốt.

Lưu ý: Về mặt lý thuyết, tôi có thể quay lại và sao chép triển khai từ jdk6. Nhưng IIRC nó được bao bọc khá nhiều trong toàn bộ lớp String - tức là không dễ dàng trích xuất.

Vì vậy, việc triển khai như vậy nằm xung quanh - ví dụ: một trong các thư viện trình phân tích cú pháp jvm hiệu suất cao?

+0

Tôi chỉ giữ một chỉ mục bên ngoài, ghi lại vị trí của chuỗi. – ZhongYu

+0

@ bayou.io Điều đó không giải quyết được nhu cầu trích xuất và sử dụng chuỗi con trong một phương pháp khác chẳng hạn. – javadba

+0

cũng chuyển chỉ mục vào phương thức đó: D ... về cơ bản thay thế tất cả '(String)' bằng '(String, int, int)'. (trừ khi bạn không thể làm điều đó với một số phương pháp của người khác) nó hút tất nhiên ... – ZhongYu

Trả lời

5

Bạn có thể làm những gì bạn cần với CharBuffer, thực hiện giao diện CharSequence. Xem, cụ thể, CharBuffer.subSequence.

+0

Nhìn vào impl cho rằng bây giờ .. CharBuffer là một trong những kẻ nio. Thời gian dài trở lại họ đã được khá nặng để nhanh chóng (không chắc chắn nếu điều đó đã thay đổi ..) Sau khi bạn có một thì có họ sẽ đáp ứng các yêu cầu. Vì vậy, tôi sẽ upvote nhưng chờ đợi lâu hơn một chút để xem một sự thay thế trọng lượng nhẹ hơn tiềm năng tồn tại. – javadba

Các vấn đề liên quan