Отображение% загрузки сделано - PullRequest
1 голос
/ 31 марта 2010

У меня есть Java-апплет для загрузки файлов на сервер. Я хочу отобразить% отправленных данных, но когда я использую ObjectOutputStream.write(), он просто записывает в буфер, а не ждет, пока данные действительно будут отправлены. Как я могу этого добиться. Возможно, мне нужно использовать синхронизацию потоков или что-то. Любые подсказки были бы наиболее полезны.

Ответы [ 2 ]

4 голосов
/ 31 марта 2010

Не используйте 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.

1 голос
/ 06 апреля 2010

То, что я искал, было на самом деле:

setFixedLengthStreamingMode(int contentLength)

Это предотвращает любую внутреннюю буферизацию, позволяя мне точно знать объем отправляемых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...