January 24, 2009

Copia rápida de archivos con Java

Recientemente se me presentó una situación interesante, en la empresa que trabajo llego una queja de un cliente sobre el funcionamiento de un producto. Esta aplicación copia ficheros entre memorias flash usb y el disco duro, utilizando las herramientas IO de Java.

El problema en concreto era que con algunos ordenadores se presentaba un error en la copia, no pudiendo realizarse de forma correcta, el algoritmo de copia original era este:




Este algoritmo de copia es bastante ràpido, un poco mas que la copia nativa del sistema, pero generaba un error con la JVM 1.6.x, en algunos ordenadores. Entonces le propusimos cambiarlo, para esto tuvimos que probar todas las opciones utilizando las librerias nativas de Java, las java.io.*.

Las pruebas se centraron en dos tipos de algoritmos:
  • Copia con buffer de datos nativos


  • Copia con buffer



De forma inesperada, las pruebas de rendimiento realizadas con JUnit dan como la mejor alternativa, al algoritmo de Copia con buffer de datos nativos, por lo que lo sustituimos dentro de la aplicacion, teniendo un rendimiento entre 5-10% menor que el algoritmo original, pero sin problemas con la JVM.