Dúvida Java String e byte[]

Nuts

Power Member
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...

Código:
                    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.

:)
 
Última edição pelo moderador:
Código:
            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...
 
Código:
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...
 
Tenta isto

String codeded = Base64.encode(str1.getBytes());
byte[] decoded = Base64.decode(codeded);
String decodeded = new String(decoded, "UTF-8");
 
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
 
Back
Topo