JavaのString型の変数を扱う上で、byte型に変換が必要なことがあります。
この記事では、getBytesの使い方やString型とbyte型の変換方法について、以下の内容で解説していきます。
- そもそもbyte型ってなに?
- getBytesの使い方について知りたい
- byte型のさまざまな変換方法について知りたい
- 16進数文字列⇔byte配列の変換方法が知りたい
getBytesの基本的な使い方から変換方法までわかりやすく解説していますので、ぜひ参考にしてください。
なお、Javaの記事については、こちらにまとめています。
Javaのbyte型とは
byte型とは1バイト(8ビット)のサイズの整数値を表します。
Javaのbyte型は符号付きで-128から127までです。文字列は文字の配列ですが、それぞれの文字は文字コードに従ってbyte型に変換することができます。
ですので、文字列はbyte型の配列に変換できますし、byte型の配列を文字列に変換することができます。
JavaのgetBytesとは
getBytesメソッドは、対象の文字列をバイトシーケンスにエンコード化して、結果をByte型の配列として返すメソッドです。
以下のように記述して使用します。
String.getBytes()
また、getBytesは引数に文字コードを指定することもできます。
String.getBytes(Charset charset)
文字コードはUTF-8、Shift-jis、ASCIIコードなども指定可能です。
文字コードについては、以下の記事で詳しく解説しています。
getBytesの使い方
ここでは、getBytesメソッドを使用して、String型とByte型の相互変換の方法を説明します。
byte配列からStringへの変換
byte型からString型へ変換する場合は、String型のコンストラクタにbyte型の値を指定します。
以下にbyte型からString型へ変換する方法を記述します。
import java.nio.charset.StandardCharsets; public class Main { public static void main(String[] args) { //byte → String byte[] sbyte = "apple".getBytes(StandardCharsets.UTF_8); String str = new String(sbyte); System.out.println("str : " + str); } }
実行結果:
str : apple
サンプルではbyte型の配列を宣言してgetBytesメソッドでバイナリの文字列を設定し、Stringのコンストラクタの引数に設定したバイナリの文字列を指定しています。
また、getBytesメソッドは文字コードを指定することも可能です。文字コードの指定は、getBytesメソッドで引数に文字コードを指定します。
なお、StandardCharsetsクラスはJava7で追加され、文字コードを指定する際に使用します。
Stringからbyte配列への変換
String型からbyte型へ変換する場合は、変換時にgetBytesメソッドを使用します。
以下にString型からbyte型へ変換する方法を記述します
public class Main { public static void main(String[] args) { //String→byte String str = "apple"; byte[] sbyte = str.getBytes(); for(int i=0; i<sbyte.length; i++) { System.out.println(sbyte[i]); } } }
実行結果:
97 112 112 108 101
サンプルではbyte型の配列を宣言してString型の変数に対して、getBytesメソッドを使用してByte型に変換しています。byte型の値は-128から127の10進数で表現するため、ループで配列の要素ごとに出力すると、実行結果のようになります。
また、getBytesメソッドはString→byte変換時にも文字コードを指定することが可能です。
byte型のさまざまな変換方法
byte型は、さまざまな方法で変換することができます。
byte型の変換方法については、以下の記事でも詳しく解説しています!
16進数文字列⇔byte配列の変換
実際のシステム開発では、バイナリデータや文字列を16進数のデータに変換して、端末間でやりとりすることがあります。
byte、Stringを16進数に変換するには、2つの方法があります。
1つ目は、「Apache Commons Codec」のHexクラスを使用することで変換することができます。
「Apache Commons Codec」のライブラリは、以下のページからダウンロードできます。
http://commons.apache.org/proper/commons-codec/download_codec.cgi
2つ目は、DatatypeConverterクラスを利用する方法です。
このクラスを使うとライブラリを追加する必要はありません。
byte配列から16進数文字列への変換
byte型から16進数の文字列に変換する方法を、以下に記述します。
DatatypeConverterクラスを使います。
import javax.xml.bind.DatatypeConverter; public class Main { public static void main(String[] args) { //byte→16進数文字列 byte[] sbyte = "apple".getBytes(); String str = DatatypeConverter.printHexBinary(sbyte); System.out.println(str); } }
実行結果:
6170706C65
サンプルでは、バイト型配列にバイナリ文字列を設定し、DatatypeConverterクラスのprintHexBinaryメソッドを使用して、バイナリ文字列を指定しています。
16進数文字列からbyte配列への変換
16進数文字列からbyte型へ変換する方法を、以下に記述します。
import javax.xml.bind.DatatypeConverter; public class Main { public static void main(String[] args) { //16進数文字列→byte String str = "6170706c65"; byte[] sbyte = DatatypeConverter.parseHexBinary(str); System.out.println(new String(sbyte)); } }
実行結果:
apple
サンプルでは、String型の16進数文字列を設定し、DatatypeConverterクラスのparseHexBinaryメソッドを使用して、引数に16進数文字列を指定しています。
Stringについてもっと詳しく知りたい方へ
Stringのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、getBytesメソッドを使用したString型とbyte型の相互変換の方法や、文字コード指定、16進数への変換方法などを説明しました。
String型⇔byte型に変換する処理は、さまざまな場面で使用することがあると思います。
もし、getBytesメソッドの使用方法を忘れてしまったら、この記事を思い出してくださいね!