У меня есть массив целых чисел в 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).
I 'используя MultipartEntityBuilder
, чтобы построить ответ в моем сервлете, как это
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;
}
(значение в этой функции ограничено 253 из 65533, но изначально это то, что .charCodeAt(i)
дает)
Вы можете видеть, что каждое из отрицательных байтовых значений из Java было заменено значением «неизвестного символа» UTF-8: 65533.
Возможно ли использовать другой тип кодировки символов, который сохранитзначения моих байтов?Можно ли отключить замену неизвестного значения, которую выполняет кодировка UTF-8?
Помощь приветствуется.