View Full Version : Dúvida Java String e byte[]


Nuts
25-01-2008, 17:14
Viva pessoal,

Estou com uma dúvida, não consigo receber uma String em Base64, converter para byte[], e dps no fim voltar a converter para String em Base64...



String str1 = strInput; //strInput vem em Base64 feito em pré processamento com Perl, oq ue é irrelevante

byte[] decoded = Base64.decode(strInput);
strAux = new String(decoded, "UTF-8");

byte[] encoded = strAux.getBytes("UTF-8");
String str2 = Base64.encode(encoded);

System.out.println(str1 + "<--->" + str2); // Queria que fossem iguais...

Agradeço já qqer ajuda que possam dar.

Obrigado

Escusado será dizer que será para ter as conversões em fases diferentes de execução.

:)

acrobat
25-01-2008, 17:30
String str1 =Base64.encode("teste".getBytes());

byte[] decoded = Base64.decode(str1);
String strAux = new String(decoded, "UTF-8");

byte[] encoded = strAux.getBytes("UTF-8");
String str2 = Base64.encode(encoded);

System.out.println("-> "+str1 + "-> "+ str2); // Queria que fossem iguais...



criei a string em base64 para simular a tua entrada de dados e funciona perfeitamente, o teu problema deve estar na entrada...

Nuts
25-01-2008, 17:53
String str1 = "E8Co9i/AqPY=";

byte[] decoded = Base64.decode(str1);
String strAux = new String(decoded, "UTF-8");

byte[] encoded = strAux.getBytes("UTF-8");
String str2 = Base64.encode(encoded);

System.out.println("-> "+str1 + "-> "+ str2); // Output: "-> E8Co9i/AqPY=-> Eyjvv70vKO+/vQ=="



E assim? Eu estou a ter outputs diferentes... o que é muito estranho...

MrFelas
26-01-2008, 04:59
String codeded = Base64.encode(str1.getBytes());
byte[] decoded = Base64.decode(codeded);
String decodeded = new String(decoded, "UTF-8");

Nuts
26-01-2008, 17:07
A str1 já está em Base64.

Tks na mm

alph
26-01-2008, 18:00
Mas porque passas os bytes codificados para uma String auxiliar?

Nuts
26-01-2008, 18:09
Pq essa string aux é o que eu vou guardar dps num objecto e o que vai ser motivo de comparação...

No fim volto queria voltar a passar a bytes e por sua vez a base64.

Tá perceptivel?

alph
26-01-2008, 18:16
Se queres guardar num objecto, mete num Object usando as classes ByteArrayOutputStream e ObjectOutputStream. Vê aqui http://forum.java.sun.com/thread.jspa?threadID=263624&messageID=999479 . Se tiveres algumas dúvidas apita.

Tu estás a pegar num array de bytes (8bits) e a colocá-los todos em ordem numa string com codificação UTF-8 (tamanho de bits variável). Apenas tendo a certeza que os teus bytes vieram duma String é que isto funcionaria, e mesmo assim tenho algumas dúvidas.

A melhor maneira é:
String em B64 -> byte[]
byte[] -> String Object
String Object -> byte[]
byte[] -> String B64

Nuts
26-01-2008, 22:29
As funções de calculo de distancias entre palavras q eu arranjei apenas calculam entre strings...

O prob está aí...


Tks pelo feedback :) vou testar e ver o q posso fazer.

alph
27-01-2008, 00:27
Então mas tu queres calcular a distancia entre palavras dum conteúdo codificado em Base64?

E porque não adaptas o teu algoritmo para trabalhar com byte[]? São sequências de "caracteres".

Nuts
27-01-2008, 00:47
Digamos que é um classificador...

O classificador recebe N Strings... que no pré processamento (Perl) foram codificadas em Base64..


Vou estudar o caso..

Tks