EDIT (2018):คำตอบของพี่น้องที่แก้ไขโดย @xinyongCheng เป็นแนวทางที่ง่ายกว่าและควรเป็นคำตอบที่ยอมรับได้
แนวทางของคุณจะสมเหตุสมผลหากคุณรู้ว่าไบต์อยู่ในชุดอักขระเริ่มต้นของแพลตฟอร์ม ในตัวอย่างของคุณนี่เป็นจริงเนื่องจากk.getBytes()
ส่งคืนไบต์ในชุดอักขระเริ่มต้นของแพลตฟอร์ม
บ่อยขึ้นคุณจะต้องระบุการเข้ารหัส อย่างไรก็ตามมีวิธีที่ง่ายกว่าคำถามที่คุณเชื่อมโยง String API จัดเตรียมเมธอดที่แปลงระหว่างสตริงและอาร์เรย์ไบต์ [] ในการเข้ารหัสเฉพาะ วิธีการเหล่านี้แนะนำให้ใช้ CharsetEncoder / CharsetDecoder "เมื่อต้องควบคุมกระบวนการถอดรหัส [เข้ารหัส] มากขึ้น"
ในการรับไบต์จาก String ในการเข้ารหัสเฉพาะคุณสามารถใช้วิธี getBytes () แบบพี่น้อง:
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
ในการใส่ไบต์ที่มีการเข้ารหัสเฉพาะลงใน String คุณสามารถใช้ตัวสร้าง String อื่น:
String v = new String( bytes, StandardCharsets.UTF_8 );
โปรดทราบว่าByteBuffer.array()
เป็นการดำเนินการที่เป็นทางเลือก หากคุณสร้าง ByteBuffer ด้วยอาร์เรย์คุณสามารถใช้อาร์เรย์นั้นได้โดยตรง มิฉะนั้นหากคุณต้องการความปลอดภัยให้ใช้ByteBuffer.get(byte[] dst, int offset, int length)
เพื่อรับไบต์จากบัฟเฟอร์ไปยังอาร์เรย์ไบต์