Necesito codificar algunos datos en la codificación Base64 en Java. ¿Cómo puedo hacer eso? ¿Cuál es el nombre de la clase que proporciona un codificador Base64?
Traté de usar la sun.misc.BASE64Encoder
clase, sin éxito. Tengo la siguiente línea de código Java 7:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Estoy usando Eclipse. Eclipse marca esta línea como un error. Importé las bibliotecas requeridas:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Pero, de nuevo, ambos se muestran como errores. Encontré una publicación similar aquí .
Usé Apache Commons como la solución sugerida al incluir:
import org.apache.commons.*;
e importar los archivos JAR descargados de: http://commons.apache.org/codec/
Pero el problema aún existe. Eclipse todavía muestra los errores mencionados anteriormente. ¿Qué tengo que hacer?
sun.**
Respuestas:
Necesita cambiar la importación de su clase:
Y luego cambie su clase para usar la clase Base64.
Aquí hay un código de ejemplo:
Luego lea por qué no debe usar los paquetes sun. * .
Actualización (2016-12-16)
Ahora puede usar
java.util.Base64
con Java 8. Primero, impórtelo como lo hace normalmente:Luego use los métodos estáticos Base64 de la siguiente manera:
Si desea codificar directamente una cadena y obtener el resultado como una cadena codificada, puede usar esto:
Ver la documentación de Java para Base64 para obtener más información.
fuente
Utilice la clase de Java 8 nunca es demasiado tarde para unirse a la diversión:
java.util.Base64
fuente
En Java 8 se puede hacer como: Base64.getEncoder (). EncodeToString (string.getBytes (StandardCharsets.UTF_8))
Aquí hay un breve ejemplo completo e independiente:
Salida:
fuente
java.nio.charset.StandardCharsets
. Editaré mi respuesta. Ver stackoverflow.com/questions/1684040/…También puedes convertir usando la codificación Base64. Para hacer esto, puedes usar el
javax.xml.bind.DatatypeConverter#printBase64Binary
método.Por ejemplo:
fuente
setDatatypeConverter()
método (que luego debe llamarse para los proveedores JAXB).Google Guava es otra opción para codificar y decodificar datos Base64:
Configuración de POM:
Código de muestra:
fuente
Eclipse le da un error / advertencia porque está tratando de usar clases internas que son específicas de un proveedor de JDK y no forman parte de la API pública. Jakarta Commons proporciona su propia implementación de códecs base64, que por supuesto residen en un paquete diferente. Elimine esas importaciones y deje que Eclipse importe las clases de Commons adecuadas para usted.
fuente
Base64
deorg.apache.commons.codec.binary
? ¿Es ahora Apache Commons para este contexto?Para convertir esto, necesita un codificador y decodificador que obtendrá de Base64Coder, un codificador / decodificador Base64 de código abierto en Java . Es el archivo Base64Coder.java que necesitará.
Ahora para acceder a esta clase según sus requisitos, necesitará la siguiente clase:
En Android, puede convertir su mapa de bits a Base64 para cargarlo en un servidor o servicio web.
Esta "imagen codificada" es una representación de texto de su imagen. Puede usar esto para cargar o para reproducir directamente en una página HTML como se muestra a continuación ( referencia ):
Documentación: http://dwij.co.in/java-base64-image-encoder
fuente
Para Java 6 -7, la mejor opción es pedir prestado código del repositorio de Android. No tiene dependencias.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Base64.java
fuente
Aquí están mis dos centavos ... Java 8 contiene su propia implementación de Base64 . Sin embargo, encontré una diferencia ligeramente inquietante. Para ilustrar, proporcionaré un ejemplo de código:
Mi envoltorio de códec:
Clase de prueba:
SALIDA:
Observe que el texto codificado de Apache contiene saltos de línea adicionales (espacios en blanco) al final. Por lo tanto, para que mi códec produzca el mismo resultado independientemente de la implementación de Base64, tuve que recurrir
trim()
al texto codificado de Apache. En mi caso, simplemente agregué la llamada al método mencionado anteriormente en mi códec de laapacheDecode()
siguiente manera:Una vez que se realizó este cambio, los resultados son los que esperaba comenzar:
CONCLUSIÓN : Si desea cambiar de Apache Base64 a Java, debe:
Si cambia sin seguir estos pasos, lo más probable es que tenga problemas. Así es como hice este descubrimiento.
fuente
En Android, use los métodos estáticos de la clase de utilidad android.util.Base64 . La documentación referenciada dice que la clase Base64 se agregó en el nivel de API 8 ( Android 2.2 (Froyo)).
fuente
Apache Commons tiene una buena implementación de Base64. Puedes hacer esto tan simple como:
Puede encontrar más detalles sobre la codificación base64 en la codificación Base64 utilizando Java y JavaScript .
fuente
Si está utilizando Spring Framework al menos la versión 4.1, puede usar la clase org.springframework.util.Base64Utils :
Delegará a Java Base64, Apache Commons Codec o JAXB DatatypeConverter, dependiendo de lo que esté disponible.
fuente
Ejemplo simple con Java 8:
fuente
En Java 7 codifiqué este método
fuente
Si está atascado en una versión anterior de Java que la 8 pero ya usa AWS SDK para Java , puede usar com.amazonaws.util.Base64 .
fuente
Intenté con el siguiente fragmento de código. Funcionó bien :-)
fuente
fuente