Konverter en bytebuffer til streng i Java
1. Oversigt
ByteBuffer er en af mange gavnlige klasser i java.nio pakke. Det bruges til at læse data fra kanaler og skrive data direkte ind i kanaler.
I dette korte selvstudie lærer vi, hvordan du konverterer en ByteBuffer til streng i Java .
2. Konvertering af en ByteBuffer til streng
Processen med at konvertere en ByteBuffer til en streng er afkodning. Denne proces kræver et tegnsæt .
Der er tre måder at konvertere en ByteBuffer på til streng :
- opretter en ny streng fra bytebuffer.array()
- opretter en ny streng fra bytebuffer.get(bytes)
- ved at bruge charset.decode()
Vi vil bruge et simpelt eksempel til at vise alle de tre måder at konvertere en ByteBuffer på til en streng .
3. Praktisk eksempel
3.1. Oprettelse af en ny streng Fra bytebuffer.array()
Det første trin er at hente byte-arrayet fra ByteBuffer . For at gøre det, kalder vi ByteBuffer.array() metode. Dette vil returnere backing-arrayet.
Derefter kan vi kalde strengen konstruktør, som accepterer en byte-array og tegnkodning for at skabe vores nye streng :
@Test
public void convertUsingNewStringFromBufferArray_thenOK() {
String content = "baeldung";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
if (byteBuffer.hasArray()) {
String newContent = new String(byteBuffer.array(), charset);
assertEquals(content, newContent);
}
}
3.2. Oprettelse af en ny streng Fra bytebuffer.get(bytes)
I Java kan vi bruge ny streng(bytes, tegnsæt) at konvertere en byte[] til en streng .
Til tegndata kan vi bruge UTF_8-tegnsættet at konvertere en byte[] til en streng . Men når byte[] indeholder binære data, der ikke er tekst, er den bedste praksis at konvertere byten[] ind i en Base64-kodet streng :
@Test
public void convertUsingNewStringFromByteBufferGetBytes_thenOK() {
String content = "baeldung";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
String newContent = new String(bytes, charset);
assertEquals(content, newContent);
}
3.3. Brug af charset.decode()
Dette er den enkleste måde at konvertere en ByteBuffer ind i en streng uden problemer:
@Test
public void convertUsingCharsetDecode_thenOK() {
String content = "baeldung";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
String newContent = charset.decode(byteBuffer).toString();
assertEquals(content, newContent);
}
4. Konklusion
Vi har i denne vejledning lært tre måder at konvertere ByteBuffer på til streng i Java . Bare husk at bruge den korrekte tegnkodning, og i vores eksempel brugte vi UTF-8 .
Som altid er den komplette kildekode for eksemplerne tilgængelig på GitHub.