Bueno, los flujos son un poco liosos para comprenderlos, pero una vez que te haces con ellos, veras que son muy utiles.
A ver , empecemos primero definiendo las diferencias,
FileInputStream es una clase que hereda directamente de InputStream, y en su constructor, pide un descriptor de fichero (Objeto tipo File), que sera el objeto donde se va a escribir. Los flujos se usan como medio de entrada salida tanto para ficheros, dispositivos o redes. En este caso, FileInputStream es una clase especializada en ofrecer un flujo hacia ficheros, pero sus metodos de lectura y escritura son solamente para flujos binarios (arrays de bytes), por lo que no es muy recomendable usarla para escribir tipos de datos especificos (enteros, string, objetos,etc).
Luego tenemos DataInputStream, que es otra subclase especializada de InputStream, aunque realmente hereda de FilterInputStream, que no es mas que una clase encargada de hacer conversiones de datos, esto queire decir, a que DataInputStream es una clase aun mas especializada, y sus metodos de lectura/escritura, sirven para escribir directamente tipos de datos en un fichero, (readInt, readString, etc). Por lo que normalmente se suele usar esta clase para escribir. Ahora bien, si es para escribir en un fichero, tendrias que usar ambas clase, tanto file como data, te pongo un ejemplillo rapido:
Código:
File fichero = new File("c:\carpeta\file.txt");
FileInputStream fis = new FileInputStream(fichero);
DataInputStream dis = new DataInputStream(fis);
dis.readString();
Quedaria asi, como puedes ver, se usan ambas clases.
Ahora bien, si quieres insertar una lista, tienes un par de opciones, la priemra seria recorrer las listas secuencialmente y guardar sus tipos de datos en el fichero, aunque tiene la pega que es bastante mas complicado. Y la opcion facil, es como has dicho, serializar el objeto y grabarlo, para ello, es tan sencillo como utilizar otra clase de flujo, (ObjectInputStream y ObjectOutputStream), esta clase te da los metodos para grabar objetos en ficheros ( serializarlos que se llama).
Código:
// Definimos una clase
class MiClase implements Serializable {
String cadena;
int integer;
}
// Esto se implementaria por alguna otra parte
MiClase instancia=new MiClase();
File fichero = new File("c:\carpeta\file.txt");
FileOutputStream fos = new FileOutputStream(fichero);
ObjectOutputStream dos = new ObjectOutputStream(fis);
dos.writeObject(instancia);
Como puedes ver, no es muy complicado. Si necesitas ayuda, no dudes en postear.
Marcadores