Передача файлов клиент-сервер в Java - PullRequest
2 голосов
/ 16 ноября 2011

Я ищу эффективный способ передачи файлов между клиентскими и серверными процессами с использованием TCP в Java. Мой код сервера выглядит примерно так:

socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();

FileInputStream fis = new FileInputStream(new File(filename));

Я просто не уверен, как поступить. Я знаю, что хочу прочитать байты из fis, а затем записать их в os, но я не уверен относительно лучшего способа чтения и записи байтов с использованием потоков байтов в Java. Я только знаком с написанием / чтением текста с использованием Writers и Readers. Может кто-нибудь сказать мне соответствующий способ сделать это? Что я должен обернуть os и fis в (если что) и как мне продолжать читать байты до конца файла без hasNext() метода (или эквивалентного)

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Вы можете сделать что-то вроде:

byte[] contents = new byte[BUFFER_SIZE];
int numBytes =0;
while((numBytes = is.read(contents))>0){
   os.write(contents,0,numBytes);
}  
2 голосов
/ 16 ноября 2011

Вы можете использовать Apache IOUtils.copy (in, out) или

import org.apache.commons.fileupload.util.Streams;
...
Streams.copy(in, out, false);

Проверка источника может оказаться интересной. (http://koders.com?)

Существует канал java.nio.Cannel с методом TransferTo, в сообществе которого смешанные мнения, более подходящие для файлов меньшего и большего размера.

Простая блочная копия между Input / OutputStream будет в порядке. Вы можете обернуть его в буферизованные потоки.

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