文字列とバイト配列の変換

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

文字列からバイト配列に変換したり、バイト配列から文字列に変換する必要があるケースはたくさんあります。これは文字セットを使って行うことができます。この実験では、いくつかの異なる方法を使って両方の種類の変換を行う方法を学びます。

getBytes() メソッドの使用

String クラスの getBytes() メソッドは、バイト配列を取得する便利な方法を提供します。String クラスには、getBytes() メソッドの 3 つのオーバーロードされたバージョンがあります。

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

まとめ

結論として、文字列からバイト配列に変換する方法や、バイト配列から文字列に変換する方法は複数あります。最も便利な方法は、String クラスの getBytes() メソッドを使用してバイト配列を生成し、その後、バイト配列から文字列を生成するために String クラスのコンストラクタを使用することです。または、Charsets と CharsetEncoders および CharsetDecoders を使用して変換を行うこともできます。