2011-11-08 10 views
5

Estoy tratando de leer en un archivo grande (700GB) y procesarlo incrementalmente, pero la red en la que estoy trabajando se apagará ocasionalmente, cortando el acceso al archivo. Esto arroja una java.io.IOException diciéndome que "El nombre de red especificado ya no está disponible". ¿Hay alguna forma de detectar esta excepción y esperar, por ejemplo, quince minutos, y luego volver a intentar leer, o se frito el objeto Reader una vez que se pierde el acceso al archivo?Recuperación desde IOException: el nombre de la red ya no está disponible

Si el lector se vuelve inútil una vez que se pierde la conexión, ¿hay alguna manera de que pueda reescribirlo de tal manera que me permita "guardar mi lugar" y luego comenzar mi lectura desde allí sin tener que leer y descartar todos los datos antes? Incluso el solo hecho de masticar datos sin procesarlo demora mucho tiempo cuando hay 500GB de ellos para pasar.

Actualmente, el código se ve algo como esto (editado por brevedad):

class Processor { 
    BufferedReader br; 

    Processor(String fname) { 
     br = new BufferedReader(new FileReader("fname")); 
    } 

    void process() { 
     try { 
      String line; 
      while((line=br.readLine)!=null) { 
       ...code for processing the line goes here... 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Gracias por su tiempo.

+0

Debe ser el tipo que hackeó Sony .... 700GB Holy crap ... –

Respuesta

4

Puede realizar un seguimiento de los bytes de lectura en una variable. Por ejemplo, aquí hago un seguimiento de una variable llamada read, y buff es char []. No estoy seguro si esto es posible usando el método readLine.

read+=br.read(buff); 

Entonces, si es necesario reiniciar, puede omitir que muchos bytes

br.skip(read); 

A continuación, puede mantener el procesamiento de distancia. Buena suerte

+2

Algunas implementaciones de 'InputStream' también admiten el método' mark() ', que te permite básicamente guardar tu lugar en una transmisión. Podría ser útil también ... – BenCole

0

Dudo que el fd subyacente siga siendo utilizable después de este error, pero tendrías que intentarlo. Es más probable que tengas que volver a abrir el archivo y saltar al lugar donde estabas.

Cuestiones relacionadas