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.
:)
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...
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...
String codeded = Base64.encode(str1.getBytes());
byte[] decoded = Base64.decode(codeded);
String decodeded = new String(decoded, "UTF-8");
A str1 já está em Base64.
Tks na mm
Mas porque passas os bytes codificados para uma String auxiliar?
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?
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
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.
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".
Digamos que é um classificador...
O classificador recebe N Strings... que no pré processamento (Perl) foram codificadas em Base64..
Vou estudar o caso..
Tks