转换字节[]的String表示回我有一个String可变的字节[]

问题描述:

string我转换成byte[],然后我编码的使用Base64在作为byte[]encodedByteArr相同。使用下面的代码:转换字节[]的String表示回我有一个<code>String</code>可变的字节[]

String string = "Test"; 
byte[] encodedByteArr= null; 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos); 
oos.writeObject(check); 
encodedByteArr= Base64.encodeBase64(bos.toByteArray()); 
oos.flush(); 
oos.close(); 
bos.close(); 
System.out.println("Encoded value is:- "+encodedByteArr); 

输出是:

编码值是: - [B @ 5fd0d5ae

现在,我接收在另一种方法中相同的编码值作为String ,意思是:

String string = "[[email protected]"; 

而这只不过是一个String我在上面的代码中生成的byte[]的表示。

现在我的任务是实际解码值并取回原始文本,即​​。

为此,我希望byte[]String表示回到byte[]而不失其完整性。

+0

见https://*.com/questions/409784/whats-the -simplest-way-to-print-a-java-array –

+0

你实际上已经解决了你的问题(我认为)。问题在于你以错误的方式打印数组......并且输出使你认为你做错了。 –

+0

你永远不会解码任何''B @ 5fd0d5ae'。您需要比默认的'toString()'更有意义的编码。 – shmosel

所有的Java数组都是这样打印的。这是他们工作的方式。如果要打印数组的内容,则必须使用java.util.Arrays中的静态方法。

System.out.println("Encoded value is:- "+Arrays.toString(encodedByteArr)); 

这是一种愚蠢的,但这是它的工作方式。

现在我的任务就是实际解码值,回到原文回

这听起来像你要进行解码,以产生原始的字符串Base64编码的字符串?

在Java 8,你可以做

import java.util.Base64; 
byte[] decoded = Base64.getDecoder().decode(string); 
String original = new String(decoded); 

一个完整的 “往返” 看起来像:

String original = "Hello"; 
byte[] encodedBytes = Base64.getEncoder().encode(original.getBytes()); 
String encodedString = new String(encodedBytes); 
System.out.println(encodedString); // "SGVsbG8=" 

byte[] decodedBytes = Base64.getDecoder().decode(encodedString); 
String decodedString = new String(decodedBytes); 
System.out.println(decodedString); // "Hello"