2017-05-09 2 views
0

私が列挙enum tpバイト配列から戻って行く方法は?

public enum Test { 
    VALUE, NAME; 
} 

を持って、私は私が列挙にその背中を変換することができますどのように

byte[] array = Test.VALUE.toString().getBytes(Charsets.UTF_8) 

バイト配列に変換?

Test.valueOf(array.toString())は機能しません。

答えて

0

最初にコンストラクタを使用して配列を適切なStringに変換する必要があります。 array.toString()はあなたの考えをしておらず、ちょっとばかげているだけです。

byte[] array = Test.VALUE.toString().getBytes(Charsets.UTF_8); 
String valueString = new String(array, Charsets.UTF_8); 
Test value = Test.valueOf(valueString); 
3

array.toStringが機能しなかった理由はtoString戻る配列の説明ではなく、文字列がUTF-8エンコーディングを持つ配列内のバイトを用いて構築することです。 toStringは、[[email protected]のようなものを返すだけで、人間にはほとんど何も意味しません。

バイト配列を文字列に変換するには、文字列のコンストラクタ(バイト配列をとるもの)とCharsetを使用します。ここでは全体のコードは次のとおりです。

// converting to byte array 
Test t = Test.VALUE; 
byte[] bytes = t.toString().getBytes(StandardCharsets.UTF_8); 
// converting back to Test 
String str = new String(bytes, StandardCharsets.UTF_8); 
Test newT = Test.valueOf(str); 

あなたは論理的に考えてみれば、toStringはおそらくあなたが期待する何を与えることはできません。これは、バイト配列を文字列に変換するために、エンコーディングを指定する必要があるためです。 toStringを呼び出すと、明らかにCharsetオブジェクトが渡されなかったので、どのような文字セットが必要なのかをコンピュータがどのように知っているのでしょうか?

+0

このコードの実行例を次に示します。https://repl.it/Hosb/0 –

関連する問題