我有一個發送分塊數據的客戶端。我的服務器預計會讀取這些數據。在服務器上,我使用的是Tomcat 7.0.42,並希望通過現有的servlet加載這些數據。閱讀分塊數據
我正在查找谷歌,看看我是否可以得到任何讀取分塊數據的例子,不幸的是我還沒有偶然發現任何。
我發現了Apache Http Client提供的ChunkedInputStream或Tomcat提供的ChunkedInputFilter的少量引用。但我找不到任何有關如何最好地使用這些的體面的例子。
如果你們中的任何人有閱讀/分析分塊數據的經驗,請分享圍繞這些的指針。
Java版本使用 - 1.7.0.45
在我現有的servlet代碼,我一直在處理通過使用NIO後簡單的請求。但是現在如果一個客戶端已經設置了傳輸編碼分塊,我需要專門處理它。所以我有一個分叉代碼。類似下面,
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;
}
}
所以,如果你注意觀察,正常情況下請求是基於「內容長度」可用,而對於分塊編碼,即不存在。因此是處理分塊數據的另一個過程。
感謝,
玉萍
爲什麼你堅持對'java.io'代碼頂部分層NIO代碼?這樣做沒有任何效率:相反。只需使用流。你確定你必須做任何事情嗎?我希望HttpServletRequest能夠處理分塊。 – EJP