Base64将byte[]编码和解码为String会得到不同的结果



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

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

然而,当我在编码之前和之后打印字节时,结果从来都不一样,我在其他论坛/问题中查找过,但在这里找不到问题,我希望在这里得到一些帮助。

确保打印的是数组的值,而不是使用数组的toString((方法。toString((返回对象的哈希代码,该代码与数组的值无关。

如果您想将字节转换为String,请使用String(byte[](构造函数,或者可以使用Java的Arrays.toString(arr(方法打印出字节,如图所示。

尝试

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" );

并发布结果。因为两个数组都应该相等。

最新更新