我在Java中有一个整数数组,并将其转换为ByteArray
public byte[] intArrayToByteArray(int[] arr) {
// create byte buffer
ByteBuffer byteBuf = ByteBuffer.allocate(arr.length*4);
// create a view of the byte buffer as a int buffer
IntBuffer intBuf = byteBuf.asIntBuffer();
intBuf.put(arr);
return byteBuf.array();
}
旋转一个像这样的数组[27759020,27682392]
变成这样的字节数组:
[1,-89,-111,-84,1,-90,102,88]
这对我来说似乎很好,问题是当我以多部分形式的表单数据响应(使用Content-Type:application / octet-stream)发送数据时。
我正在使用MultipartEntityBuilder
这样在我的servlet中构建响应
MultipartEntityBuilder mpBuilder = MultipartEntityBuilder.create();
mpBuilder.setBoundary("--boundary");
mpBuilder.addTextBody("meta", json, ContentType.APPLICATION_JSON);
mpBuilder.addBinaryBody("HeightMap", bytes);
HttpEntity multipartData = mpBuilder.build();
try(OutputStream out = response.getOutputStream()) {
multipartData.writeTo(out);
response.setStatus(HttpServletResponse.SC_OK);
} catch(Exception e) {
log.error(" --- Failed writing multipart form data to response. ---");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
我得到了一串这样的字符串编码值。
Content-Disposition: form-data; name="HeightMap"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
����fX
使用javascript解码为[1, 65533, 65533, 65533, 1,65533, 102, 88]
用于解码字符串的函数在这里
private static toUint8Array(dataString: string) {
let byteArr = new Uint8Array(dataString.length);
for(let i=0; i < dataString.length; i++) {
let byte = dataString.charCodeAt(i) & 0xFF;
byteArr[i] = byte;
}
return byteArr;
}
(此函数中的值从65533限制为253,但最初是.charCodeAt(i)
给出的值)
您会看到Java中的每个负字节值已由UTF-8“未知字符”值65533取代。
是否可以使用另一种字符编码来保留我的字节值?我可以关闭UTF-8编码所做的未知值替换吗?
感谢您的帮助。