Conversion entre chaîne de caractères et tableau d'octets

JavaBeginner
Pratiquer maintenant

Introduction

Il existe de nombreux cas où nous devons convertir une chaîne de caractères en un tableau d'octets ou un tableau d'octets en une chaîne de caractères. Cela peut être fait grâce à l'utilisation d'ensembles de caractères. Dans ce laboratoire, nous allons apprendre à effectuer les deux types de conversions en utilisant plusieurs méthodes différentes.

Utilisation de la méthode getBytes()

La méthode getBytes() de la classe String fournit un moyen pratique d'obtenir un tableau d'octets. La classe String contient trois versions surchargées de la méthode getBytes().

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

Utilisation de la méthode getBytes(String charsetName)

import java.io.UnsupportedEncodingException;

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

Utilisation de la méthode getBytes(Charset charset)

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

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

Utilisation de la méthode Charset.encode()

import java.nio.charset.StandardCharsets;

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

Utilisation de 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();

Utilisation du constructeur String

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

Utilisation d'une instance de Charset

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);

Utilisation de la méthode Charset.decode()

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();

Utilisation de 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();

Exécution du code

Copiez le code que vous voulez exécuter dans un fichier tel que ~/projet/Conversion.java et exécutez la commande suivante dans le terminal :

javac Conversion.java && java Conversion

Résumé

En conclusion, il existe plusieurs façons de convertir une chaîne de caractères en tableau d'octets ou un tableau d'octets en chaîne de caractères. La manière la plus pratique est d'utiliser la méthode getBytes() de la classe String pour générer un tableau d'octets puis d'utiliser le constructeur de la classe String pour générer une chaîne à partir du tableau d'octets. Alternativement, nous pouvons utiliser les jeux de caractères (Charsets) et les encodeurs et décodeurs de jeux de caractères (CharsetEncoders et CharsetDecoders) pour effectuer les conversions.