Введение
В жизни бывает необходимо преобразовать строку в массив байтов или наоборот. Это можно сделать с использованием наборов символов. В этом практическом занятии мы научимся выполнять оба типа преобразований несколькими разными методами.
Использование метода getBytes()
Метод getBytes() класса String предоставляет удобный способ получить массив байтов. Класс String содержит три перегруженные версии метода getBytes().
String s = "demo!";
byte[] byteArr = s.getBytes();
Использование метода getBytes(String charsetName)
import java.io.UnsupportedEncodingException;
String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);
Использование метода 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);
Использование метода Charset.encode()
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();
Использование 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();
Использование конструктора String
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");
Использование экземпляра 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);
Использование метода 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();
Использование 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();
Запуск кода
Скопируйте код, который вы хотите запустить, в файл, например, ~/project/Conversion.java, и выполните следующую команду в терминале:
javac Conversion.java && java Conversion
Резюме
В заключение, существуют несколько способов преобразования строки в массив байтов или массива байтов в строку. Самый удобный способ - использовать метод getBytes() класса String для генерации массива байтов, а затем использовать конструктор класса String для генерации строки из массива байтов. Альтернативно, мы можем использовать Charsets, CharsetEncoders и CharsetDecoders для выполнения преобразований.



