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.



