[TADP] Tamaño buffer

16 views
Skip to first unread message

Marcos

unread,
Feb 4, 2008, 7:56:40 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

Hola
Necesito manejar archivos de 2 giga aproximadamente. Estoy usando la
clase BufferedInputStream ¿qué tamaño tendría que asignarle? Porque no
me permite asignar 1 giga. Supongo es distinto en la realidad, sobre
cuántos bytes maneja internamente.

Muchas gracias.
Marcos

__._,_.___
Para desuscribirse enive un email a:
TecnicasAvanzadasDePr...@gruposyahoo.com.ar

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Fabián Mandelbaum

unread,
Feb 4, 2008, 8:00:16 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

Marcos escribió:


> Hola
> Necesito manejar archivos de 2 giga aproximadamente. Estoy usando la
> clase BufferedInputStream ¿qué tamaño tendría que asignarle? Porque no
> me permite asignar 1 giga. Supongo es distinto en la realidad, sobre
> cuántos bytes maneja internamente.
>
> Muchas gracias.
> Marcos
>
>
>

euh... ¿para qué asignar un buffer tan grande para un stream?

¿Probaste con los valores predeterminados del buffer (es decir, sin
tocar nada)? ¿qué pasa? ¿tarda mucho (después de todo, 2GB, son 2GB...)?

__._,_.___
Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Marcos Lemos

unread,
Feb 4, 2008, 8:18:16 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

Muchas gracias por la respuesta. El tema es que tengo que hacer un método para zipear logs, los cuáles pueden ocupar hasta 1 giga y medio aproximadamente. El método write() de la clase ZipOutputStream recibe como parámetro un array primitivo, por lo tanto supongo que tendría que definir uno de tamaño considerable, ya que creo que tiene que tener el mismo tamaño que le paso al BufferedInputStream. La clase que escribí es la siguiente.
 
Muchas gracias.
PD: Con 512 como tamaño no me agarró un archivo de 100 mega.
 
public class Zipper {
 private static final int BUFFER = 512;
 public Zipper() {
 }
 public static void zip(List fileNames) throws FileNotFoundException,
   IOException {
  for (Iterator iter = fileNames.iterator(); iter.hasNext();) {
   // nombre del log que corresponde a uno de los contenedores activos
   String nameFile = (String) iter.next();
   BufferedInputStream origin = null;
   // setear el nombre del archivo destino
   String nameZip = nameFile.substring(0, nameFile.length() - 4)+ ".zip";
   FileOutputStream dest = new FileOutputStream(nameZip);
   // crear un flujo de salida zip con el nombre seteado
   ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
   // crear matriz para lectura/escritura
   byte data[] = new byte[BUFFER];
   // buscar el arhivo en el directorio de logs
   FileInputStream fi = new FileInputStream(nameFile);
   origin = new BufferedInputStream(fi, BUFFER);
   ZipEntry entry = new ZipEntry(nameFile);
   // agregar el log al flujo zip de salida
   out.putNextEntry(entry);
   //lectura/escritura
   int count = origin.read(data, 0, BUFFER);
   while (count != -1) {
    out.write(data, 0, count);
    count = origin.read(data, 0, BUFFER);
   }
   origin.close();
   out.close();
   System.out.println("Comprimiendo: " + nameFile);
   //eliminar la copia del log, no zipeada
   File f = new File(nameFile);
   f.delete();
  }
 }
}


Fabián Mandelbaum <fmandelbaum@gmail.com> escribió:

Marcos escribió:
> Hola
> Necesito manejar archivos de 2 giga aproximadamente. Estoy usando la
> clase BufferedInputStream ¿qué tamaño tendría que asignarle? Porque no
> me permite asignar 1 giga. Supongo es distinto en la realidad, sobre
> cuántos bytes maneja internamente.
>
> Muchas gracias.
> Marcos
>
>
>
euh... ¿para qué asignar un buffer tan grande para un stream?

¿Probaste con los valores predeterminados del buffer (es decir, sin
tocar nada)? ¿qué pasa? ¿tarda mucho (después de todo, 2GB, son 2GB...)?



¡Capacidad ilimitada de almacenamiento en tu correo!
No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
http://correo.yahoo.com.mx/

__._,_.___
Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Fabián Mandelbaum

unread,
Feb 4, 2008, 8:47:01 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

De nada. No probé tu clase (perdón, pero en este momento no tengo
tiempo), pero te recomiendo mirar las clases para manejar streams de
Apache Commons IO (http://commons.apache.org/io/) en vez de andar
escribiendo los bytes 'a mano' como hacés al final del método zip(List),
en particular el método copyLarge de IOUtils.

¡Buena suerte!

Marcos Lemos escribió:

> ---------------------------------


>
> ¡Capacidad ilimitada de almacenamiento en tu correo!
> No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
> http://correo.yahoo.com.mx/
>

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Marcos Lemos

unread,
Feb 4, 2008, 9:19:24 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

En realidad solo necesitaría saber qué tamaño tendría que asignarle al buffer BufferedInputStream para manejar archivos de 1 giga y medio, no puedo usar lo que viene por default, se lo tengo que asignar.
Muchas gracias.

Marcos Lemos <eljugado@yahoo.com.mx> escribió:

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Hernan Liendo

unread,
Feb 4, 2008, 9:28:32 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

El tamaño del buffer no depende del tamaño del archivo original sino de la relación: consumo de memoria vs. tiempo de proceso que quieras ajustar.

Generalmente el default o "a ojo" funcionan bien. Si aun así querés obtener un valor mejor, instalá el sistema en el mejor ambiente real que puedas conseguir y empezá a hacer una búsqueda binaria. Osea:

a) Arrancá con 2Mb y medí
b) Ahora proba con 4Mb y medí. Fue mejor? fue peor? Anda acercando el número hasta obtener el mejor tiempo.

Y apuesto que cuando termines vas a lograr una mejora muy sutil y la próxima vez no tuneas a ese nivel porque tiene poco sentido :)

Abrazo y suerte. Contanos como te fue.

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Marcos Lemos

unread,
Feb 4, 2008, 10:02:10 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

Es verdad, estaba confundido, pensé que el tamaño del buffer estaba relacionado con el tamaño del archivo original. Lo que sucedía es que al ser muy grande el archivo, la aplicación no terminaba de correr. Le puse 100 KB de buffer y anda joya.
Muchas gracias.
Saludos.
Marcos.

Hernan Liendo <hernan.liendo@gmail.com> escribió:

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Nicolas Rusconi

unread,
Feb 4, 2008, 10:26:53 AM2/4/08
to TecnicasAvanzad...@gruposyahoo.com.ar

Pensaste en invocar a algun otro programa de compresion por linea de comando (javalang.Runtime)
que haga el trabajo por vos?

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___

Marcos Lemos

unread,
Feb 5, 2008, 9:12:37 AM2/5/08
to TecnicasAvanzad...@gruposyahoo.com.ar

No lo había investigado, voy a mirar por ahí.
Gracias.
Marcos.

Nicolas Rusconi <nicolas.rusconi@gmail.com> escribió:

Y! Respuestas

Pregunt?/a>

Gente real te

responde

Yahoo! Messenger

Mensajero perfecto

Llam?de PC a PC

sin costo alguno

Barra Yahoo!

Todo a un toque

Acceso rápido a

servicios Yahoo!

.

__,_._,___
Reply all
Reply to author
Forward
0 new messages