В настоящее время я работаю над школой, которая включает в себя создание P2P-клиента для стандарта, который мы придумали в классе, который использует HTTP для запроса кусков двоичного файла от пиров.Нам разрешено использовать HTTP-библиотеки Java для выполнения этих запросов, однако я столкнулся с серьезной проблемой этих библиотек.Все порции файла будут обрабатываться порциями размером <= 64 КБ, но когда я использую следующий код, максимальное количество байтов, которое я получаю, составляет около 15040, даже если длина содержимого ответа составляет 64 КБ: </p>
String response = "";
URL url = new URL(uriPath);
URLConnection conn = url.openConnection ();
conn.setConnectTimeout(30 * 1000);
conn.setReadTimeout(30 * 1000);
InputStream stream = conn.getInputStream();
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
int c;
byte[] buffer = new byte[4096];
while ((c = stream.read(buffer)) != -1)
{
byteArrayOut.write(buffer,0,c);
}
body = byteArrayOut.toByteArray();
stream.close();
result.put(Constants.HEADER_CONTENT_LENGTH, conn.getHeaderField(Constants.HEADER_CONTENT_LENGTH));
result.put(Constants.HEADER_CONTENT_CHECKSUM, conn.getHeaderField(Constants.HEADER_CONTENT_CHECKSUM));
result.put(Constants.KEY_BODY, new String(body));
Мы протестировали наш серверный компонент, и он правильно обслуживает файл при доступе к чанку с помощью wget или в браузере - этот java-клиент является единственным проблемным клиентом, который нам удалось найти.
Это проблема с классом Java URLConnection или в моем коде что-то не так с чтением двоичного файла, возвращаемого в ответе?
Примечание: я использую Java 1.6в Eclipse и из командной строки.