Los lectores almacenados en búfer deben leer un archivo secuencialmente. Lo que está buscando es java.io.RandomAccessFile, y luego puede usar seek()
para llevarlo a donde desee en el archivo.
El lector de acceso aleatorio se implementa de esta manera:
try{
String fileName = "c:/myraffile.txt";
File file = new File(fileName);
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.readChar();
raf.seek(0);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
El "rw"
es un personaje que es el modo detailed here.
La razón por la que los lectores de acceso secuencial están configurados de esta manera es para que puedan implementar sus almacenamientos intermedios y que las cosas no se puedan cambiar bajo sus pies. Por ejemplo, el lector de archivos que se le da al lector de búfer solo debe ser operado por ese lector de búfer. Si hubiera otra ubicación que podría afectarlo, podría tener una operación incoherente, ya que un lector avanzó su posición en el lector de archivos mientras que el otro quería que no cambiara, ahora usa el otro lector y está en una ubicación indeterminada.
¿Podría dar más detalles? Tengo un archivo que pesa 30 MB, no puedo cargarlo todo en la memoria. He ordenado los datos y ahora quiero hacer una búsqueda binaria directamente en el archivo. Para esto necesito buscar al azar. –
Hoy en día supongo que te refieres a 30GB, a menos que estés usando hw realmente pequeño (pero sin disco) De todos modos, las búsquedas aleatorias en discos a menudo arruinan por completo el rendimiento logarítmico de la búsqueda binaria. Un par de alternativas son 1) hacer acceso secuencial (sí, en el disco una búsqueda secuencial puede ser más rápida que una búsqueda binaria) o 2) un enfoque mixto, como usar B-tree http://en.wikipedia.org/wiki/ B-tree Si estas sugerencias no son suficientes, es posible que desee plantear su pregunta como una pregunta separada en lugar de un comentario (por favor, publique un comentario aquí con un enlace a la pregunta para enviarnos un ping) – Davide