Байт «0» записывается как байт «32» с функцией Java OutputStream.write () - PullRequest
0 голосов
/ 16 января 2012

В моем коде (HttpServlet в методе doGet) мне нужно записать байты, которые могут принимать любое значение, от 0 до 255, в файле .js. Я проверил в отладчике, что результат [1] имеет значение 0. Однако во внешнем файле он записывается как пустое пространство, а при попытке прочитать он имеет значение байта «32». У меня есть только эта проблема с байтом 0, в остальном это работает отлично. Есть идеи?

res.setContentType("image/gif");
res.setHeader("Content-Disposition","attachment;filename=myFile.js");
OutputStream os = res.getOutputStream();
byte[] result=encrypt(req.getParameter("original")); // Here result has values [64,0,81,80]
os.write(result,0,result.length);

Я получаю значения из внешнего JavaScript:

var whatever = data[1].charCodeAt(0); // whatever has value 32

Я видел похожую проблему в программе Javascript, и они исправили эту проблему, включая этот цикл, прямо перед записью в файл:

for (var i=0; i<result.length; i++) {
    result[i] = String.fromCharCode(result[i]); }

Я провел несколько тестов и работает на Javascript. Что будет эквивалентным в Java?

Спасибо

Ответы [ 3 ]

1 голос
/ 16 января 2012

На чтение двоичных данных уже ответили в Stackoverflow: Как мне прочитать двоичные данные в байтовый массив в Javascript? .

Тип контента лучше application/octet-stream, без заголовка расположения контента.

1 голос
/ 16 января 2012

32 - значение ASCII для пустого пространства.Вот почему вы получаете бланк на 32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...