2014-09-06 3 views
0

큰 파일의 체크섬을 만들고 싶습니다. 스레드 3 "스레드 예외" "java.lang.OutOfMemoryError와 : 너무 큰 필수 배열 크기"불행히도 넷빈즈 오류 표시큰 파일을 읽고 자바에서 체크섬을 만듭니다.

그래서 I 생각은 '바이트 [] = Files.readAllBytes 바이트 스트림 (경로); " 이것을 위해 작동하지 않습니다.

내 목표에 도달하는 가장 좋은 방법은 무엇인지 말해 줄 수 있습니까? 지금까지

내 코드 :

 for (Path path : ArrayOfFilePathes) { 

      byte[] byteStream = Files.readAllBytes(path); 

      if (GUI.bMd5Selected == true) { 
       checksume = "MD5"; 
       string = DigestUtils.md5Hex(byteStream); 
      }else{ 
       checksume = "Sha256"; 
       string = DigestUtils.sha256Hex(byteStream); 
      } 

감사합니다!

+0

가능한 [Java에서 파일의 MD5 체크섬 얻기] (http://stackoverflow.com/questions/304268/getting-a-files-md5-checksum-in-java) – MrTux

+0

올바른 문제는 파일 .readAllBytes. InputStream을 사용하여 파일을 읽고 다이제스트를 즉석에서 계산해야합니다. MrTux 게시 한 링크의 상단 답변을 참조하십시오. – trooper

답변

0

MappedByteBuffer을 사용하려고합니다. 이렇게하면 전체 파일을 메모리에있는 것처럼 처리 할 수 ​​있지만 비트를로드 할시기와 제거 할시기를 결정하도록 기본 클래스를 남겨 둡니다. CPU 시간과 메모리 오버 헤드 측면에서 매우 효율적입니다.

관련 문제