Java HTTP请求缓冲区大小
问题描述:
我有一个HTTP请求调度程序类,大多数情况下都能正常工作,但我注意到它在收到更大的请求时“停止”。在研究这个问题后,我想我可能没有为缓冲区分配足够的字节。之前,我是这样做的:Java HTTP请求缓冲区大小
byte[] buffer = new byte[10000];
将其更改为20000后,它似乎已经停止拖延:
String contentType = connection.getHeaderField("Content-type");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream responseData = connection.openInputStream();
byte[] buffer = new byte[20000];
int bytesRead = responseData.read(buffer);
while (bytesRead > 0) {
baos.write(buffer, 0, bytesRead);
bytesRead = responseData.read(buffer);
}
baos.close();
connection.close();
我这样做对吗?无论如何,我可以根据请求的大小动态设置缓冲区的字节数?
谢谢...
答
这是从输入流输出的错误的方式。正确的做法是:
byte[] buffer = new byte[10000];
int bytesRead = 0;
while ((bytesRead = responseData.read(buffer)) > 0) {
baos.write(buffer, 0, bytesRead);
}
或
byte[] buffer = new byte[10000];
for (int bytesRead = 0; (bytesRead = responseData.read(buffer)) > 0;) {
baos.write(buffer, 0, bytesRead);
}
另见Sun tutorial on the subject。
1〜2K(1024〜2048)的缓冲区往往绰绰有余。
答
如果你打开使用外部库,该库Apache IOUtils有toByteArray,将输入流转换为字节数组,而不需要您做任何工作。
很简单:
byte[] buffer = IOUtils.toByteArray(connection.openInputStream());
+0
不幸的是,我正在研究一个对外部库不提供很好支持的平台。不过,我感谢你的帮助! – littleK 2010-04-16 13:52:40
感谢您的建议! – littleK 2010-04-16 13:52:58
不客气。 – BalusC 2010-04-16 13:55:35