1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida Java String e byte[]

Discussão em 'Programação' iniciada por Nuts, 25 de Janeiro de 2008. (Respostas: 10; Visualizações: 3110)

  1. Nuts

    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: 26 de Janeiro de 2008
  2. acrobat

    acrobat Power Member

    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...
     
  3. Nuts

    Nuts Power Member

    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...
     
  4. Tenta isto

    String codeded = Base64.encode(str1.getBytes());
    byte[] decoded = Base64.decode(codeded);
    String decodeded = new String(decoded, "UTF-8");
     
  5. Nuts

    Nuts Power Member

    A str1 já está em Base64.

    Tks na mm
     
  6. alph

    alph Power Member

    Mas porque passas os bytes codificados para uma String auxiliar?
     
  7. Nuts

    Nuts Power Member

    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?
     
  8. alph

    alph Power Member

    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
     
  9. Nuts

    Nuts Power Member

    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.
     
  10. alph

    alph Power Member

    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".
     
  11. Nuts

    Nuts Power Member

    Digamos que é um classificador...

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


    Vou estudar o caso..

    Tks
     

Partilhar esta Página