example array java json bytearray

java - array - Coloca la matriz de bytes en JSON y viceversa



send byte array in json c# (3)

¿Es posible poner un byte[] (matriz de bytes) en JSON ?

si es así, ¿cómo puedo hacer eso en Java? entonces lee ese JSON y convierte ese campo nuevamente a byte[] ?


¿Qué tal simplemente esto?

byte[] args2 = getByteArry(); String byteStr = new String(args2);


Aquí hay un buen ejemplo de las matrices de bytes de codificación base64. Se vuelve más complicado cuando lanzas caracteres Unicode en la mezcla para enviar cosas como documentos PDF. Después de codificar una matriz de bytes, la cadena codificada se puede usar como un valor de propiedad JSON.

Apache commons ofrece buenos servicios:

byte[] bytes = getByteArr(); String base64String = Base64.encodeBase64String(bytes); byte[] backToBytes = Base64.decodeBase64(base64String);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding

Ejemplo del lado del servidor de Java:

public String getUnsecureContentBase64(String url) throws ClientProtocolException, IOException { //getUnsecureContent will generate some byte[] byte[] result = getUnsecureContent(url); // use apache org.apache.commons.codec.binary.Base64 // if you''re sending back as a http request result you may have to // org.apache.commons.httpclient.util.URIUtil.encodeQuery return Base64.encodeBase64String(result); }

Decodificación de JavaScript:

//decode URL encoding if encoded before returning result var uriEncodedString = decodeURIComponent(response); var byteArr = base64DecToArr(uriEncodedString); //from mozilla function b64ToUint6 (nChr) { return nChr > 64 && nChr < 91 ? nChr - 65 : nChr > 96 && nChr < 123 ? nChr - 71 : nChr > 47 && nChr < 58 ? nChr + 4 : nChr === 43 ? 62 : nChr === 47 ? 63 : 0; } function base64DecToArr (sBase64, nBlocksSize) { var sB64Enc = sBase64.replace(/[^A-Za-z0-9/+//]/g, ""), nInLen = sB64Enc.length, nOutLen = nBlocksSize ? Math.ceil((nInLen * 3 + 1 >> 2) / nBlocksSize) * nBlocksSize : nInLen * 3 + 1 >> 2, taBytes = new Uint8Array(nOutLen); for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) { nMod4 = nInIdx & 3; nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4; if (nMod4 === 3 || nInLen - nInIdx === 1) { for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) { taBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255; } nUint24 = 0; } } return taBytes; }


La forma típica de enviar archivos binarios en json es codificarla en base64.

Java proporciona diferentes formas de codificar y decodificar un byte[] Base64 byte[] . Uno de estos es DatatypeConverter .

Muy simple

byte[] originalBytes = new byte[] { 1, 2, 3, 4, 5}; String base64Encoded = DatatypeConverter.printBase64Binary(originalBytes); byte[] base64Decoded = DatatypeConverter.parseBase64Binary(base64Encoded);

Tendrá que hacer esta conversión dependiendo de la biblioteca de generador / analizador json que use.