2017-10-15 42 views
0

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://stackoverflow.com/questions/409784/whats-the -simplest-way-to-print-a-java-array –

+0

你實際上已經解決了你的問題(我認爲)。問題在於你以錯誤的方式打印數組......並且輸出使你認爲你做錯了。 –

+0

你永遠不會解碼任何''B @ 5fd0d5ae'。您需要比默認的'toString()'更有意義的編碼。 – shmosel

回答

0

所有的Java數組都是這樣打印的。這是他們工作的方式。如果要打印數組的內容,則必須使用java.util.Arrays中的靜態方法。

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

這是一種愚蠢的,但這是它的工作方式。

0

現在我的任務就是實際解碼值,回到原文回

這聽起來像你要進行解碼,以產生原始的字符串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" 
相關問題