EDIT (2018): Câu trả lời của anh chị em đã được chỉnh sửa bởi @xinyongCheng là một cách tiếp cận đơn giản hơn và phải là câu trả lời được chấp nhận.
Cách tiếp cận của bạn sẽ hợp lý nếu bạn biết các byte nằm trong bộ ký tự mặc định của nền tảng. Trong ví dụ của bạn, điều này đúng vì k.getBytes()
trả về các byte trong bộ ký tự mặc định của nền tảng.
Thường xuyên hơn, bạn sẽ muốn chỉ định mã hóa. Tuy nhiên, có một cách đơn giản hơn để làm điều đó so với câu hỏi bạn đã liên kết. API chuỗi cung cấp các phương thức chuyển đổi giữa chuỗi và mảng [] byte trong một mã hóa cụ thể. Các phương pháp này đề xuất sử dụng CharsetEncoder / CharsetDecoder "khi cần kiểm soát nhiều hơn quá trình giải mã [mã hóa]."
Để lấy các byte từ một Chuỗi trong một mã hóa cụ thể, bạn có thể sử dụng phương thức getBytes () anh chị em:
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Để đặt các byte với một mã hóa cụ thể vào một Chuỗi, bạn có thể sử dụng một phương thức khởi tạo Chuỗi khác:
String v = new String( bytes, StandardCharsets.UTF_8 );
Lưu ý rằng đó ByteBuffer.array()
là một hoạt động tùy chọn. Nếu bạn đã tạo ByteBuffer của mình bằng một mảng, bạn có thể sử dụng trực tiếp mảng đó. Ngược lại, nếu bạn muốn an toàn, hãy sử dụng ByteBuffer.get(byte[] dst, int offset, int length)
để lấy các byte từ bộ đệm vào một mảng byte.