자바 효율 적 인 빅 데이터 파일 읽 기 - 최 적 화 된 방법

2659 단어 자바
데이터 배경, 파일 크기 > = 10G, 줄 마다 json 대상 데이터 가 다음 과 같 습 니 다.
{"id":"C0D962","time":"2015-09-01 23:59:54","lon":"113.534","lat":"22.214",……}
효율 적 인 읽 기 방법:
방법 1:
      readLine () 은 전체 시간의 80% 를 차지 하고 Buffered Reader 를 사용 하여 5M 데 이 터 를 읽 을 때마다 IO 를 감소 합 니 다. 예 를 들 어:
BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);

업계 에 서 는 IO 자체 가 병목 이 고 IO 데이터 스루풋 을 높이 는 방법 으로 버 프 레 드 리 더 를 사용 하 는 것 도 좋 은 선택 이 라 고 평가 했다.속도 가 가장 빠 른 방법 은 당연히 Mapped Byte Buffer 이지 만 Buffered Reader 에 비해 효과 가 뚜렷 하지 않다.후 자 는 빠 르 지만 빠 르 기 에는 한계 가 있다 는 것 이다.건물 주 는 새로 몇 배로 올 라 갈 수 있다 는 환상 을 품 지 마라.현재 건물 주의 수 요 를 보면 MappedByteBuffer 로 데 이 터 를 읽 는 것 이 가장 좋 은 선택 이다.다 중 스 레 드 (다 중 스 레 드 향상 잠재력 도 크 지 않 음) 를 사용 하지 않 는 다 면 디스크 배열 을 바 꾸 는 것 이 좋 은 선택 이다.네가 만약 아직도 어떻게 된 일 인지 모른다 면, 디스크 모델 을 베 끼 고, 인터넷 에 가서 검색 해 보면, 디스크 의 읽 기와 쓰기 속 도 를 알 수 있 을 것 이다.
자세 한 설명:
2G 이상 의 텍스트 파일 을 한 줄 씩 읽 을 때 다음 코드 를 사용 하 는 것 을 추천 합 니 다.
void largeFileIO(String inputFile, String outputFile) {
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(inputFile)));
            BufferedReader in = new BufferedReader (new InputStreamReader (bis, "utf - 8"), 10 * 1024 * 1024); / / 10M 캐 시
            FileWriter fw = new FileWriter(outputFile);
            while (in.ready()) {
                String line = in.readLine();
                fw.append(line + " ");
            }
            in.close();
            fw.flush();
            fw.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
jdk 자체 가 큰 파일 의 읽 기와 쓰 기 를 지원 합 니 다.
인터넷 의 글 은 기본적으로 두 가지 로 나 뉘 는데 하 나 는 BufferedReader 류 를 사용 하여 초대형 파일 을 읽 고 쓰 는 것 이다. 다른 하 나 는 RandomAccessFile 류 를 사용 하여 읽 는 것 이다. 비 교 를 통 해 마지막 으로 앞의 방식 으로 초대형 파일 을 읽 었 다. 다음은 관련 코드 이 고 사실은 매우 간단 하 다.
-------------------------------------------------------------------
File file = new File(filepath);   
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));    
BufferedReader reader = new BufferedReader (new InputStreamReader (fis, utf - 8), 5 * 1024 * 1024); / / 5M 버퍼 로 텍스트 파일 읽 기 
  
String line = "";
while((line = reader.readLine()) != null){
//TODO: write your business
}
---------------------------------------------------------------------
코드 를 주의 하 십시오. Buffered Reader 를 예화 할 때 캐 시 를 할당 하 는 인 자 를 추가 하면 됩 니 다.

좋은 웹페이지 즐겨찾기