2011-11-08 2 views
5

큰 파일 (700GB)을 읽으려고하고 점진적으로 처리하려고하는데, 현재 작업하고있는 네트워크가 가끔씩 파일에 대한 액세스를 차단합니다. 이것은 "지정한 네트워크 이름을 더 이상 사용할 수 없다"는 java.io.IOException을 던집니다. 이 예외를 잡아서 15 분을 기다렸다가 읽은 것을 다시 시도 할 수있는 방법이 있습니까? 아니면 파일에 대한 액세스가 손실되면 Reader 객체가 튀겨 지나요?IOException에서 복구 중 : 네트워크 이름을 더 이상 사용할 수 없습니다.

일단 연결이 끊어지면 Reader가 쓸모 없게되는 경우, "내 장소를 저장"하고 다시 읽을 필요없이 읽을 수있는 방법으로 다시 쓸 수있는 방법이 있습니까? 그 전에 모든 데이터를 버리시겠습니까? 데이터를 처리하지 않고 그냥 우연히 만져도 500GB가 넘는 데는 시간이 오래 걸립니다.

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(); 
     } 
    } 
} 

이 시간 내 주셔서 감사합니다

현재 코드는 (간결함을 위해 편집)이 같이 보입니다.

+0

그는 소니를 해킹 한 사람이되어야합니다 .... 700GB 거룩한 쓰레기 ... –

답변

4

변수의 읽기 바이트를 추적 할 수 있습니다. 예를 들어 여기에서는 read라는 변수를 추적하고 buff는 char []입니다. readLine 메소드를 사용하여 이것이 가능한지 확실하지 않습니다. 다시 시작해야하는 경우

read+=br.read(buff); 

그런 다음, 당신은 많은 바이트

br.skip(read); 

그럼 당신은 멀리 처리를 유지할 수 있음을 건너 뛸 수 있습니다. 행운을 빌어 요.

+2

일부 'InputStream'구현은 기본적으로 사용자의 장소를 스트림에 저장할 수있는'mark()'메소드도 지원합니다. 유용 할 수도 ... – BenCole

0

이 오류가 발생하면 기본 fd를 계속 사용할 수 있을지는 모르겠지만 시도해야합니다. 아마도 파일을 다시 열어야하고 이전 위치로 건너 뛰십시오.

관련 문제