Буфер Spring FileInputStream время от времени содержит некорректные символы - PullRequest
0 голосов
/ 01 июля 2011

Я использую FileInputStream в Spring MVC для чтения фрагмента файла в буфер byte [].

Затем я записываю (используя FileCopyUtils.copy) буфер в поток ответов.

Я заметил, что ответ, который записывается в поток (то, что получает пользователь), похож на файл, но есть недостатки.

  1. перед данными файла, в верхней части файла стоит 2000 (без кавычек).
  2. эта строка '2000' время от времени присутствует в моем файле
  3. Файл заканчивается на '0'

ничего из этого не существует в исходном файле, из которого читается. Может ли кто-нибудь помочь мне избавиться от них, чтобы у меня был точный поток вывода?

Вот пример того, как выглядит мой неверный вывод:

2000
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line o
2000
f data
a line of data
2000

a line of data
a line of data
0

это должно быть просто:

a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data

Спасибо!

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

я предполагаю, что поток указан как chunked Transfer Encoding , и вы просто читаете его как

2 голосов
/ 01 июля 2011

Ничего общего с FileInputStream.Это происходит во время передачи клиенту.Вероятно, кодирование по частям в соответствии с предложением храповика.Используйте HttpURLConnection на клиенте и он будет обрабатывать это незаметно для вас.

0 голосов
/ 01 июля 2011

Можете ли вы попробовать IOUtils.copy () из Apache Commons IO ?

IOUtils.copy(new FileInputStream("some.file"), servletResponse.getOutputStream());

Трудно сказать по вашему коду, но, скорее всего, у вас есть ошибка где-то при копировании данных из одного места в другое (несоответствие индекса / отсутствие сброса и т. Д.) Используйте готовую и хорошо протестированную процедуру потокового копирования, чтобы точно определить проблема.

...