Konvertierung zwischen String und Byte-Array

JavaJavaBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Es gibt viele Fälle, in denen wir eine Zeichenfolge in ein Byte-Array oder ein Byte-Array in eine Zeichenfolge umwandeln müssen. Dies kann durch die Verwendung von Zeichensätzen erreicht werden. In diesem Lab werden wir lernen, wie beide Arten der Umwandlung mit mehreren verschiedenen Methoden durchgeführt werden.

Verwendung der getBytes()-Methode

Die getBytes()-Methode der String-Klasse bietet eine bequeme Möglichkeit, ein Byte-Array zu erhalten. Die String-Klasse enthält drei überladene Versionen der getBytes()-Methode.

String s = "demo!";
byte[] byteArr = s.getBytes();

Verwendung der getBytes(String charsetName)-Methode

import java.io.UnsupportedEncodingException;

String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);

Verwendung der getBytes(Charset charset)-Methode

import java.nio.charset.Charset;
import java.util.Arrays;

String s = "demo!";
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = s.getBytes(charset);

Verwendung der Charset.encode()-Methode

import java.nio.charset.StandardCharsets;

String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();

Verwendung von CharsetEncoder

import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;

String s = "demo????????????";
CharsetEncoder charsetEncoder = StandardCharsets.ISO_8859_1.newEncoder();
charsetEncoder.onMalformedInput(CodingErrorAction.IGNORE);
charsetEncoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
            .replaceWith(new byte[] {-121});
byte[] byteArr = charsetEncoder.encode(CharBuffer.wrap(s)).array();

Verwendung des String-Konstruktors

byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");

Verwendung einer Charset-Instanz

Charset charset = Charset.forName("UTF-16");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, charset);

Verwendung der Charset.decode()-Methode

import java.nio.ByteBuffer;

Charset charset = StandardCharsets.UTF_16;
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charset.decode(ByteBuffer.wrap(byteArr)).toString();

Verwendung von CharsetDecoder

import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;

CharsetDecoder charsetDecoder = StandardCharsets.UTF_16.newDecoder();
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
            .onMalformedInput(CodingErrorAction.REPLACE)
            .replaceWith("*");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charsetDecoder.decode(ByteBuffer.wrap(byteArr)).toString();

Ausführen des Codes

Kopieren Sie den Code, den Sie ausführen möchten, in eine Datei wie ~/project/Conversion.java und führen Sie den folgenden Befehl in der Konsole aus:

javac Conversion.java && java Conversion

Zusammenfassung

Zusammenfassend lässt sich sagen, dass es mehrere Möglichkeiten gibt, einen String in ein Byte-Array umzuwandeln oder ein Byte-Array in einen String. Die bequemste Methode ist es, die getBytes()-Methode der String-Klasse zu verwenden, um ein Byte-Array zu generieren, und dann den String-Klassenkonstruktor zu verwenden, um einen String aus dem Byte-Array zu generieren. Alternativ können wir Charsets sowie CharsetEncoders und CharsetDecoders verwenden, um die Umwandlungen durchzuführen.