使用JSONObject放置/获取字节数组值

Yub*_*raj 3 java pdf bytearray jersey

我试图byte[]通过JSONObject使用下面的代码获得价值,但我没有得到原始byte[]价值。

JSONArray jSONArray = jSONObject.getJSONArray(JSONConstant.BYTE_ARRAY_LIST);
    int len = jSONArray.length();
    for (int i = 0; i < len; i++) {
        byte[] b = jSONArray.get(i).toString().getBytes();
       //Following line creates pdf file of this byte arry "b"
        FileCreator.createPDF(b, "test PDF From Web Resource.pdf");

    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了pdf文件,但文件无法打开,即文件损坏。当我使用相同的类和方法创建文件时:

FileCreator.createPDF(b, "test PDF From Web Resource.pdf");
Run Code Online (Sandbox Code Playgroud)

在添加以下内容之前JSONObject

JSONObject jSONObject = new JSONObject();
jSONObject.put(JSONConstant.BYTE_ARRAY_LIST, bList);
Run Code Online (Sandbox Code Playgroud)

它创建文件,即我可以打开pdf文件并阅读其内容。

我做错了什么byte[]JSONObject以便它创建损坏的文件?请指导我。我一直欢迎发表评论。谢谢。

Yub*_*raj 5

最后,我在apache commons库的帮助下解决了我的问题。首先,我使用以下依赖性。

<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.6</version>
  <type>jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我以前使用的技术对我来说是错误的(不确定其他)。以下是我如何解决问题的解决方案。

解:

我之前在JSONObject上添加了字节数组值,并存储为String。当我尝试从JSONObject获取到我的字节数组时,它返回String而不是我的原始字节数组。并且即使我使用以下命令也没有获得原始字节数组:

byte[] bArray=jSONObject.getString(key).toString().getBytes();
Run Code Online (Sandbox Code Playgroud)

现在,

首先,我将字节数组编码为字符串,然后将其保存在JSONObject上。见下文:

byte[] bArray=(myByteArray);
//Following is the code that encoded my byte array and kept on String
String encodedString = org.apache.commons.codec.binary.Base64.encodeBase64String(bArray);
jSONObject.put(JSONConstant.BYTE_ARRAY_LIST , encodedString);
Run Code Online (Sandbox Code Playgroud)

以及返回我的原始字节数组的代码:

String getBackEncodedString = jSONObject.getString(JSONConstant.BYTE_ARRAY_LIST);
//Following code decodes to encodedString and returns original byte array
byte[] backByte = org.apache.commons.codec.binary.Base64.decodeBase64(getBackEncodedString);
//Creating pdf file of this backByte
FileCreator.createPDF(backByte, "fileAfterJSONObject.pdf");
Run Code Online (Sandbox Code Playgroud)

而已。