Saltar al contenido

poner byte array a JSON y viceversa

Después de de esta prolongada recopilación de información dimos con la respuesta esta duda que pueden tener ciertos usuarios. Te dejamos la respuesta y deseamos serte de mucha ayuda.

Solución:

Aquí hay un buen ejemplo de matrices de bytes de codificación base64. Se vuelve más complicado cuando agregas caracteres Unicode en la mezcla para enviar cosas como documentos PDF. Después de codificar un byte array el codificado string se puede utilizar como un valor de propiedad JSON.

Apache commons ofrece buenas utilidades:

 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 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 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++)  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 binarios en json es codificarlo en base64.

Java proporciona diferentes formas de codificar y decodificar en Base64 un 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 realizar esta conversión según la biblioteca de analizador/generador json que utilice.

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *