У меня есть клиент, который отправляет измененные данные. Ожидается, что мой сервер прочитает эти данные. На сервере я использую Tomcat 7.0.42 и ожидаю, что эти данные будут загружены через существующий сервлет.Чтение записанных данных
Я искал google, чтобы узнать, могу ли я получить примеры, которые читают chunked данные, к сожалению, я не наткнулся на них.
Я нашел несколько ссылок на ChunkedInputStream, предоставленные Apache Http Client или ChunkedInputFilter, предоставленные Tomcat. Но я не мог найти достойных примеров того, как лучше их использовать.
Если у вас есть какие-либо проблемы с чтением/анализом фрагментированных данных, пожалуйста, разделите указатели вокруг них.
Java используется версия - 1.7.0.45
В моем существующем коде сервлета, я был обработки простого запроса через пост с помощью НИО. Но теперь, если клиент установил кодирование передачи в chunked, мне нужно специально обработать это. Так что у меня есть код forking. Что-то, как показано ниже,
inputStream = httpServletRequest.getInputStream();
if ("chunked".equals(getRequestHeader(httpServletRequest, "Transfer-Encoding"))) {
// Need to process chunked data
} else {
// normal request data
if (inputStream != null) {
int contentLength = httpServletRequest.getContentLength()
if (contentLength <= 0) {
return new byte[0];
}
ReadableByteChannel channel = Channels.newChannel(inputStream);
byte[] postData = new byte[contentLength];
ByteBuffer buf = ByteBuffer.allocateDirect(contentLength);
int numRead = 0;
int counter = 0;
while (numRead >= 0) {
buf.rewind();
numRead = channel.read(buf);
buf.rewind();
for (int i = 0; i < numRead; i++) {
postData[counter++] = buf.get();
}
}
return postData;
}
}
Так что, если вы заметили, нормальный запрос случай основан на «Content-Length» быть доступны, в то время как для фрагментированного кодирования, что нет. И, следовательно, альтернативный процесс обработки данных.
Спасибо,
Vicky
Почему вы настаиваете на отводками НИО код на вершине 'java.io' кода? Нет ничего эффективного в этом: наоборот. Просто используйте потоки. И вы уверены, что вам нужно что-то делать? Я бы ожидал, что HttpServletRequest обработает блокировку из коробки. – EJP