Base64 编码和解码 byte[] 到 String 给出不同的结果

Base64 enconding and decoding a byte[] to String gives different results

所以我目前正在尝试将一个 byte[] 保存到一个 .txt 文件,然后在对其进行编码和使用 Base64 解码时检索它(它是一个长度为 16 的 byte[])。我试过这段代码:

byte[] bytes = new byte[16];
random.nextBytes(bytes);
String encoded = Base64.getEncoder().encodeToString(bytes);
bytes = Base64.getDecoder().decode(encoded);

但是,当我在编码前后打印 bytes 时,结果永远不一样,我查看了其他 forums/questions,但找不到问题在这里,我会很感激这里的一点帮助。

尝试

byte[] bytesBefore = new byte[16];
random.nextBytes( bytesBefore );
String encoded = Base64.getEncoder().encodeToString( bytesBefore );
byte[] bytesAfter = Base64.getDecoder().decode( encoded );
if( bytesBefore.length == bytesAfter.length )
{
  for( int i = 0; i < bytesBefore.length; ++i )
  {
    if( bytesBefore [i] != bytesAfter [i] ) System.out.printf( "Not equals! %d != %d - index %d%n", bytesBefore [i], bytesAfter [i], i );
  }
}
else System.out.println( "Arrays have different length" );

和post结果。因为两个数组应该相等。

确保您打印的是数组的值,而不是使用数组的 toString() 方法。 toString() returns对象的哈希码,与数组的值无关

如果你想把bytes转换成String,使用String(byte[])构造函数,或者你可以使用Java的Arrays.toString(arr)方法打印出来看到的字节 here.