Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> загрузка файлов на сервер, java.net.* 
:(
    Опции темы
Alexandering
Дата 15.10.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.9.2008

Репутация: нет
Всего: нет



Имею: используя пакет java.net.* организовать заливку файлов на сервер.
Делаю все пока на лок. машине.
С сокетами разобрался. Отправлять скажем текстовые файлы тож могу, построчно читая, записывая в Stream и на сервере из Stream построчно читая.
------------------
Но как быть с произвольным файлом?
Для этого использовал:
на клиенте:
Код

Socket socket = new Socket(HOST, PORT);
         FileInputStream in = new FileInputStream(sourceFile);
         FilterOutputStream out = new FilterOutputStream(socket.getOutputStream());
..........................................
while (in.read(repeatArr) != -1) {
             out.write(repeatArr);
         }


где repeatArr -массив byte[]. Если выделять память для массива более чем на 1 элемент(1 байт), то файл приходит на сервер не нормально, размер его в чреднем увеличен в 2 раза. Если оставить 1 Байт, то передача даже файла в 1 МБ очень длительна.

На сервере:
Код

FilterInputStream in = new BufferedInputStream(socket.getInputStream());
.................
FileOutputStream out = new FileOutputStream(new File(new String(fileName)));

................
while (in.read(repeatArr) != -1) {
             out.write(repeatArr);
         }


На сервере тож приходится по 1 байтику читать.
В чем тут проблема?
Для текстового файла: небольшие, скажем 1,4 КБ приходят норм, при кол-ве элементов для массива 100.
Файлы побольше - тест целиком приходит тот же, но в конец дописывается еще куча повторного текста, и так еще и еще,..не понятно с какого места...
Не знаю, как в этом случае применять in.flush out.flush и куда их вставлять и зачем, ведь у мну вроде Буферизованных потоков нет.
-----------------------
Да, использую TCP:
Socket
ServerSocket.

Это сообщение отредактировал(а) Alexandering - 15.10.2009, 23:03
PM MAIL   Вверх
garbuz
Дата 15.10.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 3
Всего: 11



Посмотрите в сторону Apache FileUpload
PM MAIL   Вверх
firedrago
Дата 15.10.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



и когда мы будем пользоваться поиском ?!  smile 
FAQ  и раздел по сетям для кого ?!

Добавлено @ 23:50
Код

private static PrintWriter out;
private static BufferedReader in;

public static final int BUFFER_SIZE = 1024 * 1024 * 5;
private byte[] buffer = new byte[BUFFER_SIZE];
    
private void inputStreamToFile(InputStream is, String filename) throws IOException{
        
    BufferedInputStream in = new BufferedInputStream(is);
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename));
    int len = 0;
    int recieve = 0;
    while ((len = in.read(buffer)) > 0) {
        out.write(buffer, 0, len);
        recieve +=len;
    }
    in.close();
    out.flush();
    out.close();
}


Код

private PrintWriter out;
private BufferedReader in;

public static final int BUFFER_SIZE = 1024 * 1024 * 5;
private byte[] buffer = new byte[BUFFER_SIZE];

private void fileToOutputStream(String filename, OutputStream os) throws IOException{
    BufferedInputStream in = new BufferedInputStream( new FileInputStream(new File(filename)));
    BufferedOutputStream bos = new BufferedOutputStream(os);
            
    int len = 0;
    int send = 0;
    while ((len = in.read(buffer)) > 0) {
        bos.write(buffer, 0, len);
        send += len;
    }
    in.close();
    bos.flush();
    bos.close();        
}


Это сообщение отредактировал(а) firedrago - 15.10.2009, 23:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.