Java - Recuperacion de datos de archivo binario

 
Vista:
sin imagen de perfil

Recuperacion de datos de archivo binario

Publicado por Julian (8 intervenciones) el 02/06/2018 00:43:57
Buenas tardes, mi duda es la siguiente. Si tengo un archivo binario donde voy guardando objetos. Tengo un objeto persona con los atributos dni, nombre, apellido, etc. Cuando yo deseo recuperar del archivo un objeto con los datos de una persona en especifico. Puedo recuperar solo ese objeto o tengo que recuperar el archivo entero y despues ir buscando?
como seria la forma de hacerlo?

desde ya muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pedro
Val: 305
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Recuperacion de datos de archivo binario

Publicado por Pedro (102 intervenciones) el 02/06/2018 14:20:04
Respuesta con Abstracción:

[CONTEXTO] Si en una habitación tienes un Baúl con muchas cosas dentro de él.

Pregunta:
Si quieres sacar algo que está dentro del Baúl pero no sabes donde está ¿qué harías?

Respuesta:
Stand _by....! dejo el stand by puesto, para darle a las neuronas tiempo y se pongan en funcionamiento.

Respuesta:

Entro a la habitación cojo el cajón lo vuelco en el suelo hasta encontrar lo que busco con sus medidas exactas.

Respuesta programación:
Lees el archivo binario y extraes lo que quieres ahora bien si lo tienes estructurado como tipo xml puedes parsearlo ..!si no es así tendrás que crear un método para localizar lo que quieres utilizando por ejemplo RandomAccesFile y te devuelva el pointer en el archivo para hacer un parsing manual y poder extraer los datos.¯\_(ツ)_/¯

Regards ( ͡° ͜ʖ ͡°)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Recuperacion de datos de archivo binario

Publicado por Julian (8 intervenciones) el 02/06/2018 14:48:39
La respuesta basica e ironica no me sirve. Ya se cual seria la forma mas simple y logica.... A lo que iba es, hay alguna forma de guardar los registros con algun tipo de orden de tal manera que cuando quiero recuperarlos los pueda hacer mas directamente sin tener que recorrer todo el archivo???
Si es una pregunta demasiado simple para tu inteligencia.... te pido disculpas y espero respuesta de algun otro que entienda que los que consultan aca es mayormente porque estan aprendiendo y no tienen muy claras las cosas.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recuperacion de datos de archivo binario

Publicado por YamilBracho (10 intervenciones) el 02/06/2018 15:58:46
Tienes que leer todo los datos en el archivo, colocarlos en alguna estructura en memoria, quizas una lista y luego hacer la busqueda en esa lista.
Para hacerlo con el archivo tendrias que tener la informacion de acceso , una estructura indexada que te permita ir a un registro en particular, alguna biblioteca de ISAM o quizas alguno de BD liviano como SQLIte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pedro
Val: 305
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Recuperacion de datos de archivo binario

Publicado por Pedro (102 intervenciones) el 02/06/2018 17:56:04
Mira Julian no te cabrees pero es que son preguntas evidentes...! o por lo menos con mis 48 años las veo evidentes.

Por otra parte cabrearse no es malo...! a veces nos ayuda a evolucionar. No obstante voy a hacerte una sugerencia a tu algoritmo.

¿Qué es serializar?

Es la capacidad de la interface serializable de java de pasar un objeto a una secuencia de bytes.

Después de saber esto mis neuronas de 48 años me dicen..! Almaceno la secuencia de bytes en un archivo binario o no..!

Luego lo único que tengo que hacer es leer ese archivo binario y
Ultilizando la interface serializable hacer el reversing de binario a objeto y meterlos en un ArrayList <Objet> para después hacer las operaciones de comprobación que tu desees.

Por otro lado un poco de conocimientos en persistencia con xml tampoco viene mal por que es una manera de almacenar en un archivo la información de forma estructurada,accesible y ordenada. Por si no lo sabes Java dispones de librerías para el parseo de xml, html.

Aquí todos estamos aprendiendo o por lo menos yo lo hago todo los días de mi vida, nada más que decir ...!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Recuperacion de datos de archivo binario

Publicado por Julian (8 intervenciones) el 03/06/2018 16:05:24
Gracias por tu respuesta Pedro y disculpas por mi reaccion innecesaria. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Recuperacion de datos de archivo binario

Publicado por Costero (148 intervenciones) el 03/06/2018 18:09:20
Usar serialization a un file es no, no. Si tu clase cambia ya no podra deserializar el file. Effective Java - Item 74.

Quizas usando RandomAccessFile class es lo que tu quieres.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void writeToPosition(String filename, int data, long position)
  throws IOException {
    RandomAccessFile writer = new RandomAccessFile(filename, "rw");
    writer.seek(position);
    writer.writeInt(data);
    writer.close();
 
private int readFromPosition(String filename, long position)
  throws IOException {
    int result = 0;
    RandomAccessFile reader = new RandomAccessFile(filename, "r");
    reader.seek(position);
    result = reader.readInt();
    reader.close();
    return result;
}
 
@Test
public void whenWritingToSpecificPositionInFile_thenCorrect()
  throws IOException {
    int data1 = 2014;
    int data2 = 1500;
 
    writeToPosition(fileName, data1, 4);
    assertEquals(data1, readFromPosition(fileName, 4));
 
    writeToPosition(fileName2, data2, 4);
    assertEquals(data2, readFromPosition(fileName, 4));
}

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recuperacion de datos de archivo binario

Publicado por Julian (8 intervenciones) el 04/06/2018 14:35:04
Gracias por tu ayuda!, de paso consulto... a partir de que volumen de informacion es conveniente pasar a una base de datos?
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recuperacion de datos de archivo binario

Publicado por Costero (148 intervenciones) el 05/06/2018 02:20:27
Esa es una buena pregunta, pero no tengo idea.

Lo que se te puedo decir de algunas ventajas de cuando utilizas base de datos.

1-) Securidad. Si le pones usuario y contraseña.
2-) Puede correr como servidor y correr en otra computadora si quieres
3-) Velocidad. Las bases de datos están diseñadas con velocidad en la mente, claro esta hay indexes necesarios
4-) Aplicaciones, reportes, Excel pueden conectarse a base de datos de una forma común. Usando files es mucho mas difícil
5-) etc, etc, ...

La desvetaja claro esta que es un poco mas complicado un file simple.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar