Foros del Web » Programación para mayores de 30 ;) » Java »

Leer un fichero de texto desde la posición de un byte hasta otro byte.

Estas en el tema de Leer un fichero de texto desde la posición de un byte hasta otro byte. en el foro de Java en Foros del Web. ¡Hola a todos! Antes de nada quería dar las gracias por todos los aportes que he visto en el foro. He perdido la cuenta de ...
  #1 (permalink)  
Antiguo 26/02/2010, 05:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Leer un fichero de texto desde la posición de un byte hasta otro byte.

¡Hola a todos!

Antes de nada quería dar las gracias por todos los aportes que he visto en el foro. He perdido la cuenta de en cuántas ocasiones he buscado en Google ayuda sobre algo relacionado con JAVA y ahí estaba un link a Forosdelweb para solucionarme el problema, Hoy la situación ha cambiado y necesito vuestra ayuda directa. Veréis, tengo que procesar un fichero de texto muy, muy pesado. Y cuando digo pesado, hablo de unos 30 GB de tamaño.

Se trata de un XML que incluye elementos iterativos con su identificador y propiedades. He programado un procesador de texto que lee el fichero y guarda en una tabla (otro fichero, nada de SQL) el identificador del elemento, la posición del byte de comienzo y la del byte de finalización. Confiaba en que, como en otros lenguajes, existiera algún método que permita leer un texto dada dos posiciones conocidas, pero no he encontrado nada que me solucione el problema. ¿Sabéis si existe algo así en JAVA que permita sólo obtener una porción de datos conocidas las posiciones en el fichero de los bytes de inicio y de finalización? Si no, ¿qué solución se os ocurre? Busco una solución que me permita alojar en un servidor el archivo de 30 GB y el fichero de índices, de modo que cuando haga una petición para obtener un elemento busque dinámicamente el inicio y el fin en el fichero de índices y acto seguido recupere solamente esa información leyendo del archivo de 30 GB. La idea es que la búsqueda sea dinámica y eficiente.

¡Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 27/02/2010, 14:59
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Leer un fichero de texto desde la posición de un byte hasta otro byte.

Hola,

Posiblemente puedas usar java.io.RandomAccessFile; que te permite usar el método seek para posicionar el 'apuntador' del archivo en un lugar diferente. El único inconveniente posiblemente va a ser la codificación del archivo, tendrías que probar si el método readChar te funciona. Sino posiblemente tendrías que leer los bytes y convertirlos en UTF-8. (readUTF no va a funcionar sino usaste writeUTF para guardarlos y readLine va a leer desde la posición hasta el final de la línea).

Por razones de eficiencia, sería mejor que usaras una base de datos, inclusive SQLite, que es un archivo y no necesita un servicio.

Saludos,
  #3 (permalink)  
Antiguo 01/03/2010, 07:01
 
Fecha de Ingreso: febrero-2010
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Leer un fichero de texto desde la posición de un byte hasta otro byte.

¡Muchas gracias!

Tantearé con la solución propuesta, a ver si puedo hacer algo con RandomAccessFile. Tienes razón en que una base de datos sería más eficiente, pero todo esto forma parte de un proyecto para la universidad en la que estudio y, aunque busco que sea eficiente, el proyecto sólo funcionará en una pequeña Intarnet que tenemos aquí, y es lo suficientemente complejo como para no complicarme más de la cuenta... por ahora, Si veo que el progreso es bueno, o si me sugieren que su uso sea extensible fuera de la Intranet, no dudaré un segundo en usar una BBDD, que tienes toda la razón en que es más rápida y segura que este "truquillo".

¡Un saludo!

Etiquetas: byte, fichero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:39.