Java >> Java tutorial >  >> Tag >> byte

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.


Java tag