Не используйте ObjectOutputStream
. Он предназначен для написания сериализованных объектов Java, а не для записи необработанных двоичных данных. Это действительно может заблокировать поток. Скорее просто пишите прямо в OutputStream
URL-соединения.
Тем не менее, код выглядит довольно сложным. Даже после перечитывания несколько раз и моргания моих глаз бесчисленное количество раз, я не могу понять это правильно. Я предлагаю вам отправить эти файлы в кодировке multipart/form-data
с помощью Commons HttpClient . Вы можете найти здесь пример базового кода. Вам просто нужно изменить Part[] parts
, чтобы включить все файлы. В свою очередь сервлет с другой стороны может использовать Commons FileUpload для анализа запроса multipart/form-data
.
Чтобы рассчитать прогресс, я бы предложил выбрать CountingOutputStream
из Commons IO . Просто оберните OutputStream
им и напишите в него.
Обновление: , если вы не хотите поставлять свой апплет с большим количеством сторонних библиотек (что я считаю разумным), тогда посмотрите этот фрагмент кода (и первоначальный вопрос упоминается как 1-я ссылка) как создать тело multipart/form-data
самостоятельно, используя URLConnection
.