Eu preciso codificar alguns dados na codificação Base64 em Java. Como faço isso? Qual é o nome da classe que fornece um codificador Base64?
Eu tentei usar a sun.misc.BASE64Encoder
classe, sem sucesso. Eu tenho a seguinte linha de código Java 7:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Estou usando o Eclipse. O Eclipse marca essa linha como um erro. Importei as bibliotecas necessárias:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Mas, novamente, os dois são mostrados como erros. Encontrei um post semelhante aqui .
Usei o Apache Commons como a solução sugerida, incluindo:
import org.apache.commons.*;
e importando os arquivos JAR baixados de: http://commons.apache.org/codec/
Mas o problema ainda existe. O Eclipse ainda mostra os erros mencionados anteriormente. O que devo fazer?
sun.**
Respostas:
Você precisa alterar a importação da sua classe:
E altere sua classe para usar a classe Base64.
Aqui está um exemplo de código:
Depois leia por que você não deve usar os pacotes sun. * .
Atualização (16-12-2016)
Agora você pode usar o
java.util.Base64
Java 8. Primeiro, importe-o normalmente:Em seguida, use os métodos estáticos Base64 da seguinte maneira:
Se você desejar codificar diretamente a string e obter o resultado como string codificada, poderá usar este:
Consulte a documentação Java para Base64 para obter mais.
fonte
Use a classe nunca é tarde demais para se juntar à diversão:
java.util.Base64
fonte
No Java 8, isso pode ser feito como: Base64.getEncoder (). EncodeToString (string.getBytes (StandardCharsets.UTF_8))
Aqui está um exemplo completo curto e independente:
Resultado:
fonte
java.nio.charset.StandardCharsets
. Vou editar minha resposta. Veja stackoverflow.com/questions/1684040/…Você também pode converter usando a codificação Base64. Para fazer isso, você pode usar o
javax.xml.bind.DatatypeConverter#printBase64Binary
métodoPor exemplo:
fonte
setDatatypeConverter()
método (que deve ser chamado pelos provedores JAXB).O Google Guava é outra opção para codificar e decodificar dados Base64:
Configuração POM:
Código de amostra:
fonte
O Eclipse fornece um erro / aviso porque você está tentando usar classes internas específicas de um fornecedor JDK e não fazem parte da API pública. O Jakarta Commons fornece sua própria implementação de codecs base64, que obviamente residem em um pacote diferente. Exclua essas importações e deixe o Eclipse importar as classes apropriadas do Commons para você.
fonte
Base64
org.apache.commons.codec.binary
? Agora é o Apache Commons para este contexto?Para converter isso, você precisa de um codificador e decodificador que você obterá do Base64Coder - um codificador / decodificador Base64 de código aberto em Java . É o arquivo Base64Coder.java que você precisará.
Agora, para acessar esta classe conforme sua exigência, você precisará da classe abaixo:
No Android, você pode converter seu bitmap em Base64 para fazer upload em um servidor ou serviço da web.
Esta "encodedImage" é uma representação de texto da sua imagem. Você pode usar isso para fins de upload ou para exibir diretamente em uma página HTML, como abaixo ( referência ):
Documentação: http://dwij.co.in/java-base64-image-encoder
fonte
Para Java 6 -7, a melhor opção é pedir emprestado código do repositório Android. Não possui dependências.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Base64.java
fonte
Aqui estão meus dois centavos ... O Java 8 contém sua própria implementação do Base64 . No entanto, encontrei uma diferença um pouco perturbadora. Para ilustrar, fornecerei um exemplo de código:
Meu invólucro de codec:
Classe de teste:
RESULTADO:
Observe que o texto codificado do Apache contém quebras de linha adicionais (espaços em branco) no final. Portanto, para que meu codec produza o mesmo resultado, independentemente da implementação do Base64, tive que chamar
trim()
o texto codificado do Apache. No meu caso, simplesmente adicionei a chamada de método acima mencionada ao meu codec, daapacheDecode()
seguinte maneira:Depois que essa alteração foi feita, os resultados são o que eu esperava começar:
CONCLUSÃO : Se você deseja alternar do Apache Base64 para Java, deve:
Se você alternar sem seguir estas etapas, provavelmente terá problemas. Foi assim que fiz essa descoberta.
fonte
No Android, use os métodos estáticos da classe de utilitário android.util.Base64 . A documentação referenciada diz que a classe Base64 foi adicionada no nível 8 da API ( Android 2.2 (Froyo)).
fonte
O Apache Commons possui uma boa implementação do Base64. Você pode fazer isso simplesmente como:
Você pode encontrar mais detalhes sobre a codificação base64 na codificação Base64 usando Java e JavaScript .
fonte
Se você estiver usando o Spring Framework pelo menos na versão 4.1, poderá usar a classe org.springframework.util.Base64Utils :
Ele delegará no Base64, no Apache Commons Codec ou no JAXB DatatypeConverter do Java 8, dependendo do que estiver disponível.
fonte
Exemplo simples com Java 8:
fonte
No Java 7, eu codifiquei esse método
fonte
Se você estiver preso a uma versão anterior do Java que 8, mas já estiver usando o AWS SDK para Java , poderá usar com.amazonaws.util.Base64 .
fonte
Eu tentei com o seguinte trecho de código. Funcionou bem. :-)
fonte
fonte