3

Apache Commons ライブラリの Base64 エンコーダーを使用しています。現在、ランタイム/IDE で何かおかしなことが起こっているか、Base64 エンコーディング (または仕様としての Base64) の実装が非決定論的です。

val test = Base64.encodeBase64("hello".getBytes).toString
val test2 = Base64.encodeBase64("hello".getBytes).toString
val test3 = Base64.encodeBase64("hello".getBytes).toString

上記のそれぞれは、異なる結果を生成します。これは期待されていますか?私はこれをScalaで書いています...

4

2 に答える 2

9

あなたが投稿した Scala コードに相当する Java コードは次のようになります。

String test = Base64.encodeBase64("hello".getBytes()).toString();
String test2 = Base64.encodeBase64("hello".getBytes()).toString();
String test3 = Base64.encodeBase64("hello".getBytes()).toString();

これにより、それぞれtoString()byte[]配列オブジェクトBase64.encodeBase64("hello".getBytes())が異なるオブジェクトになるため、コンソールに異なる出力が出力されます。Javadocs によると、クラスのtoString()メソッドを実行します。Object

オブジェクトの文字列表現を返します。

クラス Object の toString メソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュ コードの符号なし 16 進数表現で構成される文字列を返します。

正しいString表現を取得するには、 Arrays.toString()メソッドを使用します。正しい結果を出力するサンプル Java コードは次のとおりです。

String test = Arrays.toString(Base64.encodeBase64("hello".getBytes()));
String test2 = Arrays.toString(Base64.encodeBase64("hello".getBytes()));
String test3 = Arrays.toString(Base64.encodeBase64("hello".getBytes()));
于 2013-05-25T19:05:53.887 に答える