Java バイト配列の作成と復号のサンプル(getBytes)

Javaのバイト配列の作成と復号のサンプルです。

確認環境
・Java 8

目次

サンプル 文字列からバイト配列を作成する(try~catch不要)
  文字列からバイト配列を作成する(try~catch必要)
  バイト配列を復号化して文字列を作成する
  Shift_JISとMS932とWindows-31Jの違い

文字列からバイト配列を作成する(try~catch不要)

public byte[] getBytes(Charset charset)
  • getBytesメソッドは、文字列をバイト配列にします。
  • 引数は、Charset型で文字コードを指定するため、try~catchは不要です。
  • バイト配列は、データ型がバイト(byte)型で値が-128~127までの数値です。
package test1;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Test1 {
	public static void main(String[] args) {
		Charset charset = StandardCharsets.UTF_8;
		String str1 = "あA1";

		byte [] ar1 = str1.getBytes(charset);
		for (byte b1: ar1){
			System.out.println(b1);
			//-29 -127 -126 65 49
		}
	}
}

10行目は、getBytesメソッドで文字列をバイト配列にしています。
getBytesメソッドの引数は、StandardCharsetsクラスのUTF_8を指定しているのでtry~catchは不要です。

以下はJava8 API仕様のgetBytesメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#getBytes-java.nio.charset.Charset-

文字列からバイト配列を作成する(try~catch必要)

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
  • getBytesメソッドは、文字列をバイト配列にします。
  • 引数は、String型の文字コードを指定します。
  • 引数に想定外の値が指定される可能性があるため、try~catchが必要です。
  • バイト配列は、データ型がバイト(byte)型で値が-128~127までの数値です。
package test1;
import java.io.UnsupportedEncodingException;

public class Test1 {
	public static void main(String[] args) {
		String str1 = "あA1";
		
		try {
			byte[] ar1 = str1.getBytes("MS932");
			for (byte b1: ar1){
				System.out.println(b1);
				//-126 -96 65 49
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}

9行目は、getBytesメソッドで文字列をバイト配列にしています。
getBytesメソッドの引数にStringの文字列を指定する場合はtry~catchが必要です。

以下はJava8 API仕様のgetBytesメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#getBytes-java.lang.String-

バイト配列を復号化して文字列を作成する

public String(byte[ ] bytes, Charset charset)
public String((byte[] bytes,String charsetName) throws UnsupportedEncodingException
  • Stringクラスのコンストラクタでバイト配列を復号化し新しいStringを生成します。
  • 1つめの引数はバイト配列で2つめの引数は、復号化で使用する文字コードです。
  • バイト配列とは、データ型がバイト(byte)型で値が-128~127までの配列です。
package test1;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Test1 {
	public static void main(String[] args) {
		Charset charset = StandardCharsets.UTF_8;
		byte [] b1 = {-29,-127,-126,65,49};
		String str1 = new String(b1,charset); //UTF-8
		System.out.println(str1); //あA1
		                    
		String str2;
		byte [] b2 = {-126,-96,65,49};
		try {
			str2 = new String(b2,"MS932"); //MS932
			System.out.println(str2); //あA1
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}

Stringクラスのコンストラクタでバイト配列を復号化し新しいStringを生成しています。
引数の文字コードにStringの文字列を指定する場合は、try~catchが必要です。

以下はJava8 API仕様のStringクラスのコンストラクタのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#String-byte:A-java.nio.charset.Charset-

Shift_JISとMS932とWindows-31Jの違い

  • MS932は、①や㍉や㈱などのNEC特殊文字と髙(はしごだか)などのIBM拡張文字があります。(+NEC選定IBM拡張文字)
  • Windows-31JはMS932の別名で同じです。
  • Shift-JISには、NEC特殊文字とIBM拡張文字とNEC選定IBM拡張文字は入っていないので注意が必要です。
  • Java MS932とShift_JISの違い

関連の記事

Java Base64のエンコードとデコードのサンプル

△上に戻る