Envolviendo varios OutputStreams
Pequeño inciso: por supuesto que a un OutputStream que acepta otro OutputStream como parámetro, le puedes pasar como parámetro un OutputStream que acepta otro OutputStream como parámetro. Suena a trabalenguas, pero la cuestión es que puedes fabricar un FileOutputStream, pasarlo por dentro de un BufferedOutputStream, y pasarlo por dentro de un DataOutputStream, por ejemplo.
Y por si alguien se lo está preguntando: sí, por supuesto que puedes meter un BufferedOutputStream dentro de otra clase envolvente. De hecho, puedes meter una clase envolvente dentro de otra clase envolvente, sin ningún problema, lógico.
Voy a hacer una función para demostrar esto, que es bastante gracioso, por otra parte.
EscribirCadenas va a ser una función que va a escribir en un archivo a través de un FileOutputStream, a través de un BufferedOutputStream, a través de un ObjectOutputStream, apuntando directamente a mi BufferedOutputStream.
Ahora lo que voy a hacer es guardar 256 veces en mi ObjectOutputStream una cadena de caracteres que va a ser Cadena i
, por ejemplo, con salto de línea para que se pueda leer bien.
Llamar a writeUTF lo que provocará es que se guarde en el ObjectOutputStream, que eventualmente se lo pasará al BufferedOutputStream, el cual tarde o temprano decidirá guadrar sobre el archivo. Finalmente le vamos a poner un flush(), porque nunca se sabe, por si acaso puede haber quedado por ahí algo suelto. De hecho, se lo voy a poner al ObjectOutputStream por ser más conveniente. Realmente cada tipo de OutputStream tiene su propia política de flush(), así que no os confiéis igualmente.
Voy a llamar a escribirCadenas() acá, y voy a ejecutar esto sobre un archivo llamado cadenas.bin. Y... ahí lo tenemos. Dice que son datos binarios. Pero si lo renombro por un archivo de texto normal y corriente y lo trato de abrir con el bloc de notas del sistema, vemos que aunque evidentemente hay bastante suciedad en el archivo, en principio parece que las cadenas se están escribiendo, de vez en cuando con algún regalito a su alrededor.
Pero como sea, por lo menos se está haciendo y sí, puedes meter un FileOutputStream dentro de un BufferedOutputStream, dentro de un ObjectOutputStream. Quién sabe si le puedes meter más cosas por dentro.
Desplegar transcripción del episodio
[Música]
Y por si alguien se lo está preguntando: sí, por supuesto que puedes meter un BufferedOutputStream dentro de otra clase envolvente. De hecho, puedes meter una clase envolvente dentro de otra clase envolvente, sin ningún problema, lógico.
Voy a hacer una función para demostrar esto, que es bastante gracioso, por otra parte.
EscribirCadenas va a ser una función que va a escribir en un archivo a través de un FileOutputStream, a través de un BufferedOutputStream, a través de un ObjectOutputStream, apuntando directamente a mi BufferedOutputStream.
Ahora lo que voy a hacer es guardar 256 veces en mi ObjectOutputStream una cadena de caracteres que va a ser Cadena i
, por ejemplo, con salto de línea para que se pueda leer bien.
Llamar a writeUTF lo que provocará es que se guarde en el ObjectOutputStream, que eventualmente se lo pasará al BufferedOutputStream, el cual tarde o temprano decidirá guadrar sobre el archivo. Finalmente le vamos a poner un flush(), porque nunca se sabe, por si acaso puede haber quedado por ahí algo suelto. De hecho, se lo voy a poner al ObjectOutputStream por ser más conveniente. Realmente cada tipo de OutputStream tiene su propia política de flush(), así que no os confiéis igualmente.
Voy a llamar a escribirCadenas() acá, y voy a ejecutar esto sobre un archivo llamado cadenas.bin. Y... ahí lo tenemos. Dice que son datos binarios. Pero si lo renombro por un archivo de texto normal y corriente y lo trato de abrir con el bloc de notas del sistema, vemos que aunque evidentemente hay bastante suciedad en el archivo, en principio parece que las cadenas se están escribiendo, de vez en cuando con algún regalito a su alrededor.
Pero como sea, por lo menos se está haciendo y sí, puedes meter un FileOutputStream dentro de un BufferedOutputStream, dentro de un ObjectOutputStream. Quién sabe si le puedes meter más cosas por dentro.