当前位置: 首页 > 面试题库 >

将字节数组放入JSON,反之亦然

尹凌龙
2023-03-14
问题内容

是否可以将byte[](字节数组)放入JSON

如果是这样,如何在Java中做到这一点?然后读取该JSON并将该字段再次转换为byte[]


问题答案:

这是base64编码字节数组的一个很好的示例。当您在组合中添加unicode字符以发送诸如PDF文档之类的内容时,情况变得更加复杂。对字节数组进行编码后,可以将编码后的字符串用作JSON属性值。

Apache Commons提供了很好的实用程序:

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

https://developer.mozilla.org/zh-
CN/docs/Web/JavaScript/Base64_encoding_and_decoding

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);
}

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;
}


 类似资料:
  • 问题内容: 我发现了将文件转换为字节数组并将字节数组写入存储中文件的多种方法。 我想要的是转换为字节数组,然后将字节数组转换回。 我不想像以下那样将其写出到存储中: 我想以某种方式执行以下操作: 问题答案: 我认为您误解了班级的真正含义。它只是系统上文件的表示,即文件名,路径等。 您甚至看过该课程的Javadoc 吗?在这里看看, 如果检查它具有的字段或方法或构造函数参数,您会立即得到暗示,它只是

  • 问题内容: 我正在尝试通过android将图像作为字节数组发送,并在服务器端将其转换回png文件,我正在服务器端。 这是我的android代码,它将图像转换为字节数组并将其作为请求发送到服务器: 这是我的服务器端程序: 服务器上的异常是: 问题答案: 您将图像写入客户端的文件输出流,该流会将内容存储到物理文件中。然后,您尝试将的表示形式转换为图像内容。这是行不通的,该类的方法不会为您提供写入流中的

  • 问题内容: 我必须在Android中将字节数组转换为字符串,但是我的字节数组包含负值。 如果我再次将该字符串转换为字节数组,则得到的值与原始字节数组值不同。 我该怎么做才能正确转换?我用于执行转换的代码如下: 我陷入了这个问题。 问题答案: 你的字节数组必须具有某种编码。如果你使用负值,则编码不能为ASCII。一旦弄清楚了,就可以使用以下方法将一组字节转换为字符串: 你可以使用许多编码,请查看Su

  • 问题内容: 我想将一些数据存储到Java中的字节数组中。基本上只是数字,每个数字最多占用2个字节。 我想知道如何将整数转换为2字节长的字节数组,反之亦然。我发现有很多解决方案在使用Google搜索,但是大多数解决方案没有解释代码中会发生什么。我真的不了解很多变化的东西,所以我希望能得到一个基本的解释。 问题答案: 将带符号的字节打包为一个int时,每个字节都需要屏蔽掉,因为由于算术提升规则(在JL

  • 问题内容: 我正在尝试将a 转换为原始类型,反之亦然: 奇怪的是,当我尝试将新分配的分配回a时,结果不过是垃圾。 但是,当我使用原始数据类型作为参数时,似乎相同的算法工作得很好。 问题答案: 改用这些。

  • 问题内容: 我需要转换一个随机生成的盐值并将其存储在数据库中。为了将其存储在数据库中,我将其转换为字符串。然后,为了检索原始值,我将其转换回字节。但是两个值都不匹配。我已经尝试过“ UTF-8”,“ UTF-16”,BASE64Encoder。 上面代码的输出(执行两次): 和 问题答案: 在上面编写代码时,先打印,然后实际打印的是数组对象方法的输出,这只是默认的Object 方法。所以我看不出您