Resultados 1 al 7 de 7

Streams Java (2)

  1. #1 Streams Java (2) 
    Medio
    Fecha de ingreso
    Jan 2008
    Ubicación
    Perú
    Mensajes
    74
    Descargas
    1
    Uploads
    0
    hola a todos señores de Hack Hispano, antes de empezar me gustaria agradecerles la gran ayuda q me brindan en cada tema q posteo. bueno, he aqui mi pregunta:

    stoy realizando una aplicacion en Java en la cual hago uso de una lista de listas, el punto es que esa lista tngo q guardarla dentro de un archivo para despues usar los datos dentro de ese archivo (es decir, los datos de la lista) para esto tengo 3 opciones:

    1. implementar la interface Serializable en la clase de la lista
    2. usar FileInputStream y FileOutputStream
    3. usar DataInputStream y DataOutputStream

    la verdad no se con cual hacerlo, ahora mismo lo estoy haciendo con FileInput y FileOutput. si no fuese mucha molestia me gustaria q tambien me explicaran la diferencia entre FileInput y DataInput.

    agradezco nuevamnte su tiempo, sera hasta otra oportunidad.
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Ubicación
    Valhala
    Mensajes
    1.167
    Descargas
    4
    Uploads
    0
    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.
    http://www.project-longinus.es
    Citar  
     

  3. #3  
    Medio
    Fecha de ingreso
    Jan 2008
    Ubicación
    Perú
    Mensajes
    74
    Descargas
    1
    Uploads
    0
    holas smaug_ te agradezco mucho x tu minitutorial me ha servido de muxo, ia comprendo las diferencias entre las diferentes clases. solo me queda una pequeña duda. ia que (como entendi) seria recomendable serializar mi clase para tener esa lista (atributo de la clase serializada, la cual por cierto es una lista de listas de objetos) dentro de un archivo. Mi duda es como puedo recuperar despues tan solo esa lista, es dcir, si tngo q llamar a una especie de file.atributo o tener q recuperar la clase en su totalidad y recien de alli llamar a su atributo (con los datos serializados obviamente). Ademas, si no fuera mucha molestia, me gustaria q me des un ejemplito como los q me diste para ver como podria recuperar a mi objeto serializado. espero no molestar mucho, mas bien muchas gracias x tu respuesta m esta sirviendo de mucho. hasta luego y gracias nuevamente
    Citar  
     

  4. #4  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Ubicación
    Valhala
    Mensajes
    1.167
    Descargas
    4
    Uploads
    0
    Me alegra saber que te ha servido. Cuando serializas un objeto, automaticamente serializas todos los objetos que pueda contener (por ejemplo, los tipo String, no son tipos de datos sino objetos). Una vez guardado en el fichero, a la hora de recuperar, no puedes acceder a un atributo directamente, asi que tienes que recuperar el objeto completo, con todos sus objetos contenidos, y asi ya tienes la instancia, y desde la instancia del objeto trabajar normalmente. Al recuperar el objeto, es tan sencillo como realizar un Casting al leer del fichero. El ejemplo seria algo como lo siguiente:
    Código:
    //Dare como definida la clase anterior.
    // Esto se implementaria por alguna otra parte
    MiClase instancia;
    File fichero = new File("c:\carpeta\file.txt");
    FileInputStream fis = new FileInputStream(fichero);
    ObjectInputStream dis = new ObjectInputStream(fis);
    instancia=(MiClase) dos.readObject(); // Todo es practicamente igual, excepto esta linea
    Como puedes ver, es bastante sencillo, la unica diferencia es usar las clases de entrada en vez de salida, y a la hora de leer el objeto, guardarlo en una instancia de MiClase haciendo un casting.
    http://www.project-longinus.es
    Citar  
     

  5. #5  
    Medio
    Fecha de ingreso
    Jan 2008
    Ubicación
    Perú
    Mensajes
    74
    Descargas
    1
    Uploads
    0
    holas nuevamente smaug_ has de saber que gracias a ti he despejado el 90% de todas mis dudas, muchas gracias, eres un buen maestro hehe. solo para llenar ese 10% de duda q aun m keda, me gustaria q m explicaras la diferencia entre un .dat y un .txt pues he visto ejemplos en los cuales ponen el .dat, no se si esto sea mas optimo q el .txt espero contar con tu apoyo nuevamente, y otra vez, muchas gracias
    Citar  
     

  6. #6  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Ubicación
    Valhala
    Mensajes
    1.167
    Descargas
    4
    Uploads
    0
    Me alegra saber que te ha servido de ayuda ^_^
    Sobre tu ultima duda, realmente no existe ninguna diferencia entre un fichero .dat y .txt, puedes ponerle la extension que quieras, ya que el acceso al fichero va a ser lo mismo. En muchos sitios ponen .dat, para indicar simplemente que es un fichero de datos, además, aunque pongamos un txt, si por ejemplo el fichero guarda una clase serializada, no podremos ver su contenido. Pero ya te digo, que no existe diferencia ninguna, es cuestion del programador.
    http://www.project-longinus.es
    Citar  
     

  7. #7  
    Medio
    Fecha de ingreso
    Jan 2008
    Ubicación
    Perú
    Mensajes
    74
    Descargas
    1
    Uploads
    0
    muxas gracias smaug_ ia mis dudas fueron despejadas, te agradezco la gran ayuda q me brindaste, para la proxima preguntare cosas mas interesantes jeje gracias nuevamente.
    Saludos
    Citar  
     

Temas similares

  1. Java en web
    Por foxwar en el foro PROGRAMACION WEB
    Respuestas: 7
    Último mensaje: 02-02-2009, 01:06
  2. Streams Java
    Por eduk15 en el foro GENERAL
    Respuestas: 1
    Último mensaje: 03-10-2008, 09:53
  3. help java
    Por ebernaguz en el foro PROGRAMACION DESKTOP
    Respuestas: 3
    Último mensaje: 24-05-2008, 11:46
  4. Ocultación Streams
    Por Poldarn en el foro VULNERABILIDADES
    Respuestas: 8
    Último mensaje: 23-09-2006, 19:16
  5. [Java]
    Por clarinetista en el foro PROGRAMACION DESKTOP
    Respuestas: 0
    Último mensaje: 15-04-2004, 01:47

Marcadores

Marcadores