Quebrar arquivo em bytes e enviar para Servidor FTP

Boa tarde pessoal. Estou precisando da ajuda de vocês.
Tenho uma aplicação onde o usuário escolhe o arquivo de sua máquina através de um JFileChooser e envia para um servidor FTP, criando uma pasta para armazenar este arquivo, até ai beleza !
O problema é que para enviar um arquivo de 2MB esta atividade demora quase 10 min, ou seja, uma perda enorme de tempo.
Ouvi dizer de alguns colegas que trabalham com VB aqui na empresa (só eu trabalho com java aqui) que é possível fazer uma quebra em bytes deste arquivo para depois o enviar para o ftp. Procurei muita coisa sobre isso mas não estou conseguindo implementar o que vi. Vou postar minha classe que faz o acesso a este ftp e peço a ajuda de vocês para me ajudar a resolver este problema. Estou trabalhando em cima dele a horas !

[code]import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.swing.JOptionPane;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPReply;

/**
*

  • @author Rafael
    */
    public class ClienteFTP {

    private String servidor = “Francatalogos FTP”;
    FTPClient ftp = new FTPClient();
    FTPClientConfig config = new FTPClientConfig();

    public void inicia(String localArquivo, String nomePasta, String nomeArquivo) {

     ftp.configure(config);
    
     try {
         int responder;
         //Conecta e loga no FTP
    
         ftp.connect("ftp.francatalogos.com.br");
         ftp.login("francatalogos", "********");
         System.out.print(ftp.getReplyString());
         responder = ftp.getReplyCode();
    
         ftp.enterLocalPassiveMode();
         ftp.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
         ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
         
         //Obtem o local do arquivo 
         FileInputStream file = new FileInputStream(localArquivo);
    
         //Verifica se o caminho/pasta existe.
         boolean isDirectory = ftp.changeWorkingDirectory("T&TSistemas/" + nomePasta);
         if (!isDirectory) {
             //se não existir cria a pasta
             ftp.makeDirectory("T&TSistemas/" + nomePasta);
         }
         ftp.changeWorkingDirectory("T&TSistemas/" + nomePasta);
    
         File f = new File(localArquivo);
         nomeArquivo = f.getName();
    
         salvaArquivo(nomeArquivo, file);
    
         if (!FTPReply.isPositiveCompletion(responder)) {
             ftp.disconnect();
             JOptionPane.showMessageDialog(null, "Não foi possível conectar a " + servidor + ".");
             System.exit(1);
         }
         ftp.logout();
     } catch (IOException io) {
         io.printStackTrace();
         JOptionPane.showMessageDialog(null, "Erro ServidorFTP" + io);
     } finally {
         if (ftp.isConnected()) {
             try {
                 ftp.disconnect();
                 System.out.println("Desconectado !");
             } catch (IOException io) {
             }
         }
     }
    

    }

    private void salvaArquivo(String nomeArquivo, FileInputStream file) throws IOException {
    //Verifica se o arquivo foi salvo(storeFile).
    if (ftp.storeFile(nomeArquivo, file)) {
    JOptionPane.showMessageDialog(null, “Arquivo armazenado com sucesso.”);
    } else {
    JOptionPane.showMessageDialog(null, “Não foi possível armazenar o arquivo.”);
    ftp.logout();
    ftp.disconnect();
    }
    }
    }[/code]

Obrigado desde já pessoal, boa tarde !

Dividir o arquivo em partes não vai necessariamente aumentar a velocidade se este é o problema, esse metodo é mais utilizado para evitar reenvios muito grandes em caso de falhas, o fluxo depende exclusivamente da banda passante.
Se o seu fluxo apresenta muitas falhas de envio, então a quebra ajuda a evitar reenviar tudo novamente.
Mas a quebra é um algoritmo mais demorado que deve ser implementado com cuidado, o seu servidor tem que garantir que voce consiga escrever um arquivo por append.

Bem é minha opinião, se você não concordar fique a vontade para debatermos sobre o assunto

Se, em vez de você usar o ftp do seu programa, fizer o ftp via algum outro programa (como o ftp.exe do Windows ou o /usr/bin/ftp do Linux), quanto tempo leva para enviar esse arquivo?

Pessoal desculpa a demora na resposta, é que surgiram uns imprevistos aqui na empresa.
vtr002, cara obrigado pela dica em primeiro lugar, não tenho nem argumentos para debater sobre as vantagens e desvantagens de se usar este método, pois nunca usei e não entendo a fundo sua verdadeira função, foi apenas uma alternativa que alguns desenvolvedores aqui me sugeriram, achei meio estranho na hora tb, mas resolvi dar uma pesquisada e tentar implementar, mas pelo visto não é a melhor ou a maneira correta de melhorar esta funcionalidade. Mas entao quero saber, há alguma possibilidade de melhorar este desempenho via código?

entanglement, você esta querendo dizer para fazer a transferencia “manualmente”? Fazendo desta forma o tempo de tranferencia é mínima, de 30 a 40 segundos. Desculpe-me se te entendi de forma errada !
Mas pergunto a você também srsrr, há alguma possibilidade de melhorar este desempenho via código ?

http://osdir.com/ml/issues-commons-apache/2013-01/msg00379.html