elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Problema]Mejor manera de copiar archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Problema]Mejor manera de copiar archivos  (Leído 2,130 veces)
youraish

Desconectado Desconectado

Mensajes: 4


Ver Perfil
[Problema]Mejor manera de copiar archivos
« en: 30 Marzo 2017, 21:11 pm »

Buen día, estoy realizando un programa para copiar grandes cantidades de archivos, alrededor de 80TB de un disco a otro y me he encontrado que me JAVA hay varios métodos para copiar archivos de un disco a otro, quería saber si me podían ayudar a saber cuál es el más eficiente en cuanto a tiempo.

Además, querías preguntarles maneras de optimizar el tiempo, estaba pensando que podría poner varios threads a copiar archivos, pero ¿Cómo defino cuantos es lo más eficiente?

Estos temas de eficiencia me traen liado, les agradecería mucho la ayuda!


Algunos de los métodos que encontré para copiar archivos son:

1-
Que creo que es la más normal:
FileInputStream in = new FileInputStream(inFile);
         FileOutputStream out = new FileOutputStream(outFile);

         int c;
         while( (c = in.read() ) != -1)
            out.write(c);

         in.close();
         out.close();

2-
FileChannel in = (new FileInputStream(s)).getChannel();
              FileChannel out = (new FileOutputStream(t)).getChannel();
              in.transferTo(0, s.length(), out);
              in.close();
              out.close();

3-
Podría ser llamando a ""Runtime.exec"  y copiandolo mediante la consola de windows (el programa se ejecutará el windows)

4-
  public static void copyFile_Java7(String origen, String destino) throws IOException {
        Path FROM = Paths.get(origen);
        Path TO = Paths.get(destino);
        //sobreescribir el fichero de destino, si existe, y copiar
        // los atributos, incluyendo los permisos rwx
        CopyOption[] options = new CopyOption[]{
          StandardCopyOption.REPLACE_EXISTING,
          StandardCopyOption.COPY_ATTRIBUTES
        };
        Files.copy(FROM, TO, options);
    }



Gracias.


En línea

Chuidiang

Desconectado Desconectado

Mensajes: 161



Ver Perfil WWW
Re: [Problema]Mejor manera de copiar archivos
« Respuesta #1 en: 30 Marzo 2017, 22:09 pm »

Hola:

La primera opción es la más ineficiente. Siempre es más eficiente leer/escribir muchos bytes en disco de golpe que de uno en uno. Podrías hacerla más eficiente usando métodos de leer/escribir arrays de byte[] de tamaños más o menos grande. Las clases BufferedInputStream, BufferedReader, o BufferedOutputStream, BufferedWriter se encargan automáticamente de coger bloques de bytes enteros de disco en memoria y dártelos según los pidas.

Entre las otras opciones, no podría decirte cual es más eficiente, puesto que depende de cómo la hayan implementado por debajo (transfer, copy de windows, Files.copy), pero imagino que cualquiera de ellas vale, si nos fiamos de los que lo han implementado por debajo.

Otro detalle a tener en cuenta. Si son muuuuchos ficheros, windows es más eficiente haciendo un zip con todos ellos y transfiriendo ese único fichero que hacer la transferencia de los ficheros por separado. Puedes probarlo rápidamente sin hacer ningún programa, basta con hacer la prueba arrastrando los ficheros (bien el zip, bien el directorio que contenga la multitud de ficheros) en el explorador de windows y ver el resultado. Tendrías que ver lo que cuesta hacer el zip, pero según cuántos ficheros sean, en general compensa (nunca lo he hecho con 80TB, no sé que puede tardar un zip de eso o si lo aguanta siquiera, pero puedes probar a hacer varios zip más pequeños en vez de uno grande).

Saludos.


En línea

youraish

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [Problema]Mejor manera de copiar archivos
« Respuesta #2 en: 30 Marzo 2017, 22:53 pm »

Hola:

La primera opción es la más ineficiente. Siempre es más eficiente leer/escribir muchos bytes en disco de golpe que de uno en uno. Podrías hacerla más eficiente usando métodos de leer/escribir arrays de byte[] de tamaños más o menos grande. Las clases BufferedInputStream, BufferedReader, o BufferedOutputStream, BufferedWriter se encargan automáticamente de coger bloques de bytes enteros de disco en memoria y dártelos según los pidas.

Entre las otras opciones, no podría decirte cual es más eficiente, puesto que depende de cómo la hayan implementado por debajo (transfer, copy de windows, Files.copy), pero imagino que cualquiera de ellas vale, si nos fiamos de los que lo han implementado por debajo.

Otro detalle a tener en cuenta. Si son muuuuchos ficheros, windows es más eficiente haciendo un zip con todos ellos y transfiriendo ese único fichero que hacer la transferencia de los ficheros por separado. Puedes probarlo rápidamente sin hacer ningún programa, basta con hacer la prueba arrastrando los ficheros (bien el zip, bien el directorio que contenga la multitud de ficheros) en el explorador de windows y ver el resultado. Tendrías que ver lo que cuesta hacer el zip, pero según cuántos ficheros sean, en general compensa (nunca lo he hecho con 80TB, no sé que puede tardar un zip de eso o si lo aguanta siquiera, pero puedes probar a hacer varios zip más pequeños en vez de uno grande).

Saludos.

Esto me ayuda muchisimo! Lo aprecio mucho, voy a investigar y hacer algunas pruebas con lo que me dijiste.
Si me topo con alguna duda puede que te envie algun mesaje, espero que no te moleste.

Gracias!
En línea

Chuidiang

Desconectado Desconectado

Mensajes: 161



Ver Perfil WWW
Re: [Problema]Mejor manera de copiar archivos
« Respuesta #3 en: 31 Marzo 2017, 18:51 pm »

Prefiero que pongas las dudas en el foro, así puede participar mas gente :)

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cual es la mejor manera de manejar archivos?
ASM
Avoidance25 6 5,236 Último mensaje 25 Agosto 2009, 20:16 pm
por Avoidance25
programa o codigo bat para copiar archivos desde pc a Pendrive de manera oculta?
Hacking
Adcade 6 12,663 Último mensaje 27 Enero 2012, 22:58 pm
por beholdthe
Problema al copiar archivos
Programación C/C++
gxg 4 2,870 Último mensaje 2 Abril 2011, 12:09 pm
por satu
PROBLEMA AL COPIAR ARCHIVOS DESDE DISCO DURO
Windows
estepeño 6 7,188 Último mensaje 7 Abril 2011, 22:26 pm
por estepeño
Mejor manera de formatear « 1 2 »
Software
motocros_elche 19 5,621 Último mensaje 3 Noviembre 2011, 16:08 pm
por motocros_elche
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines