Foros del Web » Programación para mayores de 30 ;) » Java »

Copiar ficheros demasiado lento !!!

Estas en el tema de Copiar ficheros demasiado lento !!! en el foro de Java en Foros del Web. Hola a todos: Quisiera saber si alguien me puede ayudar a resolver este problema. El caso es tengo un programa que corre en una máquina ...
  #1 (permalink)  
Antiguo 13/11/2007, 18:45
 
Fecha de Ingreso: junio-2004
Mensajes: 185
Antigüedad: 19 años, 11 meses
Puntos: 0
Pregunta Copiar ficheros demasiado lento !!!

Hola a todos:

Quisiera saber si alguien me puede ayudar a resolver este problema.
El caso es tengo un programa que corre en una máquina linux que lo que hace es copiar ficheros que estan en una maquina windows, la carpeta que quiero copiar que se llama docs está montada en el servidor linux por samba, esta carpeta tiene miles de ficheros de 300 k en formato pdf en total son decenas de Gigas.
Ahora bien no sé por qué razón el programa se demora tantoooo copiando al punto que la velocidad de copiado es de 180 MB en 1 hora, muy muy lento a ese ritmo se demoraría en copiar todo en varios días, aqui les pongo el código del método que copia el fichero a ver si me pueden ayudar:

Código PHP:

        
public static void copy(String source_nameString dest_nameboolean overridethrows IOException
        
{
                
File source_file = new File(source_name);
                
File destination_file = new File(dest_name System.getProperty("file.separator") + source_file.getName());
                
FileInputStream source null;
                
FileOutputStream destination null;
                
byte[] buffer;
                
int bytes_read;
                              
                try {
                
// Primero asegurarse de que el source_file
                // Existe, es un fichero y se puede leer.
                 
if (!source_file.exists() || !source_file.isFile())
                         throw new 
FileCopyException("FileCopy: no existe el fichero origen: " +  source_name);
                 if (!
source_file.canRead())
                         throw new 
FileCopyException("FileCopy: no hay permisos de lectura en fichero origen: " source_name);
                                        
                 
// Si el destino existe asegurarse de que se puede escribir
                 // y preguntar antes de sobreescribirlo.Si el destino no existe asegurarse que el directorio existe y es escribible
                 
if (destination_file.exists()) {
                         if (
destination_file.isFile()) {// isFile  
                                 
                                 
if (!destination_file.canWrite())
                                     throw new 
FileCopyException("FileCopy: no existen permisos de escritura "+"file is unwriteable: " dest_name);
                                
                                 if (!
override)
                                         throw new 
FileCopyException("FileCopy: cancelado no se puede sobreescribir el fichero.");
                                 }
                         else
                                 throw new 
FileCopyException("FileCopy: destination is not a file: " +  dest_name);
                 }
                 else {
                         
File parentdir parent(destination_file);//Vuelvo a coger el directorio no hace falta se puede cambiar
                         
if (!parentdir.exists())
                                 throw new 
FileCopyException("FileCopy: el direcorio destino no existe " 
                                                                       
dest_name);
                         if (!
parentdir.canWrite())
                                 throw new 
FileCopyException("FileCopy: no existen permisos de escritura " +
                                                 
"en el Directorio destino" dest_name);
                 }
                 
// If we've gotten this far, then everything is okay; we can
                 // copy the file.
                 
source = new FileInputStream(source_file);
                 
destination = new FileOutputStream(destination_file);
                 
buffer = new byte[1024*500];
                 while(
true) {
                         
bytes_read source.read(buffer);
                         if (
bytes_read == -1) break;
                         
destination.write(buffer0bytes_read);
                 }
                  
//System.out.print(source_file.getName()+ "Copiado OK");
                
}
                
                
// No importa que pase siempre hay que cerrar cualquier streams que se haya abierto.
                
finally {
                        if (
source != null)
                                try { 
source.close(); } catch (IOException e) { ; }
                                if (
destination != null)
                                        try { 
destination.close(); } catch (IOException e) { ; }
                }
        } 
Espero me puedan ayudar.
Saludos
  #2 (permalink)  
Antiguo 14/11/2007, 03:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Copiar ficheros demasiado lento !!!

Por un lado, copiar a traves de la red ya es bastante lento.

Por otro lado, prueba a encapsular tus XStream en BufferedXStream a ver si así mejora el rendimiento. De esta forma ambos son algo más independientes.

Por ultimo, si tienes tantos ficheros separados y tienes ancho de banda suficiente, tambien puedes probar a copiar varios ficheros en paralelo usando un pool de Threads.

S!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 05:53.