Problema converter byte[] para String

Bom Dia,

Estou com um problema na conversão de byte[] para String.
To recebendo um valor por Xml e uma classe ja pega ele e transforme em byte[]. O problema é que quando transformo ele pra String ele não transforma para o mesmo valor.
Estou usando o seguinte codigo pra passa esse byte[] que peguei do Xml para String:

Exp: Valor vindo do Xml (String) = UZaPRYSInDl3L3C/awyxyTYCEoc=
byte[] value = [B@12b23ce

public void setMinhaString(byte[] value) throws UnsupportedEncodingException{
		System.out.println("BYTE = " + value); //Out: [B@12b23ce
		String decode = new String(value, "UTF-8");
		System.out.println("STRING = " + decode); //Out: Q??E???9w/p?k??6?
		this.minhaString = decode;
	}

Quando uso o codigo abaixo pra testar, ele me grava outro valor de byte[] e me retorna a String correta:

public static void main(String[] args) throws UnsupportedEncodingException {
	   
		byte[] decode = "UZaPRYSInDl3L3C/awyxyTYCEoc=".getBytes();
		System.out.println("decode = " + decode); //Out: [B@3e25a5  <---Diferente da anterior
		String minhaString = new String(decode, "UTF8"); 
		System.out.println("minhaString = " + valor); //Out: "UZaPRYSInDl3L3C/awyxyTYCEoc="  <---Mostra String corretamente
}

O que pode ser isso, ja q os dois códigos fazem a mesma coisa, mas me mostram resultados diferentes?

Para converter um array de bytes em uma string, nunca use “toString” (que é chamada implicitamente quando você concatena uma string com um array de bytes.)

Use sempre new String (o seu array de bytes, a sua codificação).

Exemplo:

byte[] bytes  = {'A', 'B', 'C'};
String s = new String (bytes, "ISO-8859-1");

[quote=thingol]Para converter um array de bytes em uma string, nunca use "toString" (que é chamada implicitamente quando você concatena uma string com um array de bytes.)

Use sempre new String (o seu array de bytes, a sua codificação).

Exemplo:

byte[] bytes = {'A', 'B', 'C'}; String s = new String (bytes, &quot;ISO-8859-1&quot;); [/quote]

Obrigado pela resposta rápida, meu amigo!
Acontece q já estou fazendo isso aqui:

public void setMinhaString(byte[] value) throws UnsupportedEncodingException{ System.out.println(&quot;BYTE = &quot; + value); //Out: [B@12b23ce String decode = new String(value, &quot;UTF-8&quot;); System.out.println(&quot;STRING = &quot; + decode); //Out: Q??E???9w/p?k??6? this.minhaString = decode; }
Como falei, ao converter o byte q foi gravado pra String está vindo uma String diferente, e quando uso a mesma String com o código para teste abaixo que tem o mesmo principio do codigo acima, o byte gravado é diferente e a String retornada é a correta:

[code]
public static void main(String[] args) throws UnsupportedEncodingException {

     byte[] decode = &quot;UZaPRYSInDl3L3C/awyxyTYCEoc=&quot;.getBytes();  
     System.out.println(&quot;decode = &quot; + decode); //Out: [B@3e25a5  &lt;---Diferente da anterior  
     String minhaString = new String(decode, &quot;UTF8&quot;);   
     System.out.println(&quot;minhaString = &quot; + valor); //Out: &quot;UZaPRYSInDl3L3C/awyxyTYCEoc=&quot;  &lt;---Mostra String corretamente  

}[/code]

Problema resolvido! :smiley:
Converti meu valor em byte[] para Base64 para depois transformar em String:

public void setMinhaString(byte[] value) throws UnsupportedEncodingException{
		byte[] base64 = Base64.encodeBase64(value);
		String valor = new String(base64, "ISO-8859-1");
		this.minhaString = valor;
	}

De onde vc tirou essa classe Base64?

Usei o org.apache.commons.codec.binary.Base64.

Como que funciono? … tu converteu pra Base64 …

tenho um problema parecido aqui … e até agora não achei uma boa solução e olha que já tentei

ByteArrayInputStream byteIn = new ByteArrayInputStream(byteArray);
String string1 = org.apache.comons.io.IOUtils(byteIn);
DataInputStream dataIn = new DataInputStream(byteIn);
String string2 = dataIn.readLine();

[quote=Xakkal]Problema resolvido! :smiley:
Converti meu valor em byte[] para Base64 para depois transformar em String:
[/quote]

Desta forma q vc ta fazendo vc ta achando o valor em Base64 e não no original. Provavelmente vc esteja trabalhando com criptografia SHA… se for, ok deve-se trabalhar com Base64 ou hexadecimal algo do tipo.

Att,

[quote=Norxs]Como que funciono? … tu converteu pra Base64 …

tenho um problema parecido aqui … e até agora não achei uma boa solução e olha que já tentei

[/quote]

Qual é o problema q vc ta tendo? tem um byte[] de um valor e não consegue obter ele em String? como vc ta tentando fazer isso?

Att.

Karaka, eu vi a pergunta do Norxs em 03/03/2009 13:14:20 achei q era 3/3/2010.

\o/ :smiley: