¿Cuál es la forma correcta de convertir un byte [] a una cadena Base64 en Java? Mejor aún sería Grails/Groovy porque me dice que la función encodeAsBase64()
está en desuso. No se recomienda el uso del paquete sun.misc.BASE64Encoder
y genera una cadena de tamaño diferente en algunas plataformas de Windows.Codificación Base64 en Java/Groovy
22
A
Respuesta
12
Apache Commons tiene muchas utilidades:
binario del paquete: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
Descargar: http://commons.apache.org/codec/download_codec.cgi
2
podría utilizar el código abierto Base64Coder biblioteca
import biz.source_code.base64Coder.Base64Coder
@Grab(group='biz.source_code', module='base64coder', version='2010-09-21')
String s1 = Base64Coder.encodeString("Hello world")
String s2 = Base64Coder.decodeString("SGVsbG8gd29ybGQ=")
76
La mejor forma de hacerlo esto en groovy es:
def encoded = "Hello World".bytes.encodeBase64().toString()
assert encoded == "SGVsbG8gV29ybGQ="
def decoded = new String("SGVsbG8gV29ybGQ=".decodeBase64())
assert decoded == "Hello World"
0
implementar su propio método como este :)
public class Coder {
private static final String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
public static String encodeAsBase64(String toEncode) {
return encodeAsBase64(toEncode.getBytes())
}
public static String encodeAsBase64(byte[] toEncode) {
int pos = 0;
int onhand = 0;
StringBuffer buffer = new StringBuffer();
for(byte b in toEncode) {
int read = b;
int m;
if(pos == 0) {
m = (read >> 2) & 63;
onhand = read & 3;
pos = 1;
} else if(pos == 1) {
m = (onhand << 4) + ((read >> 4) & 15);
onhand = read & 15;
pos = 2;
} else if(pos == 2) {
m = ((read >> 6) & 3) + (onhand << 2);
onhand = read & 63;
buffer.append(base64code.charAt(m));
m = onhand;
onhand = 0;
pos = 0;
}
buffer.append(base64code.charAt(m));
}
while(pos > 0 && pos < 4) {
pos++;
if(onhand == -1) {
buffer.append('=');
} else {
int m = pos == 2 ? onhand << 4 : (pos == 3 ? onhand << 2 : onhand);
onhand = -1;
buffer.append(base64code.charAt(m));
}
}
return buffer.toString()
}
}
Cuestiones relacionadas
- 1. codificación base64 en MySQL
- 2. Imagen de codificación Base64
- 3. ¿Detecta codificación base64 en PHP?
- 4. Detectar codificación base64
- 5. MD5 codificación Hash y Base64
- 6. JSON de codificación/decodificación de codificación base64/decodificación en JavaScript
- 7. base64 codificación cadenas unicode en python 2.7
- 8. Codificación y decodificación Base64 en Oracle
- 9. UIImage a base64 Codificación de cadena
- 10. codificación Base64 excepción utilizando impulso tiro
- 11. ¿Cómo convertir una imagen a codificación base64?
- 12. ¿Es posible un espacio en una codificación base64?
- 13. Node.JS - Codificación de imágenes en base64 usando el Buffer
- 14. ¿Por qué el relleno se usa en la codificación Base64?
- 15. ¿Cuál es el verdadero propósito de la codificación Base64?
- 16. codificación base64 que no usa caracteres "+/=" (más o iguales)?
- 17. Codificación de un archivo de imagen con base64
- 18. ¿Cuál es la ventaja de utilizar la codificación Base64?
- 19. Encriptar y desencriptar con codificación AES y Base64
- 20. Negociación/compresión de contenido HTTP: ¿utiliza Base64 con Aceptar codificación/Codificación de contenido?
- 21. Cómo codificar Base64 en el iPhone
- 22. NSImage a Base64
- 23. ¿Puedo convertir la fuente de codificación base64 incorporada en un archivo de fuente?
- 24. Debo usar codificación Base64 o byte [] para devolver datos binarios en el servicio web .NET
- 25. Cómo moverse por IE8 32k límite de datos: ¿uri en codificación base64?
- 26. ¿Base64 está estandarizado?
- 27. cómo convertir una imagen en cadena base64
- 28. Convierte el objeto String .net en cadena codificada en base64
- 29. ¿Existe una codificación pronunciable?
- 30. ¿Es esta cadena Base64? ¿Cómo puedo saber cuál es la codificación utilizada?
El problema con esto es que 'encodeBase64' pone línea de una línea que termina en cada 76 caracteres que meta la pata de la longitud de la cuerda. Terminé usando 'def encoded = byteArray.collect {it as char}' en lugar de una codificación Base64. –
De forma predeterminada, groovy no inserta nuevas líneas adicionales en la codificación, desde la versión 1.6.0. Llamar 'encodeBase64 (true)' habilita ese comportamiento. – ataylor
+1 para una solución simple y concisa que puedo usar en un guion pequeño y rápido (sin ningún deps de lib) necesito verificar algunas cosas :-) – jpswain