파일에서 MessageDigest (해시)를 만드는 방법이 있으며 많은 파일 (> = 100,000) 에이 작업을 수행해야합니다. 성능을 최대화하기 위해 파일에서 읽는 데 사용되는 버퍼를 얼마나 크게 만들어야합니까?
대부분의 사람들은 기본 코드에 익숙합니다 (이 경우에 대비하여 여기에서 반복하겠습니다).
MessageDigest md = MessageDigest.getInstance( "SHA" );
FileInputStream ios = new FileInputStream( "myfile.bmp" );
byte[] buffer = new byte[4 * 1024]; // what should this value be?
int read = 0;
while( ( read = ios.read( buffer ) ) > 0 )
md.update( buffer, 0, read );
ios.close();
md.digest();
처리량을 최대화하기위한 이상적인 버퍼 크기는 얼마입니까? 나는 이것이 시스템에 의존 한다는 것을 알고 있으며, OS, FileSystem 및 HDD에 의존하고 있으며 다른 하드웨어 / 소프트웨어가 혼합되어 있다고 확신합니다 .
(나는 Java에 다소 익숙하지 않다는 것을 지적해야하므로 알지 못하는 Java API 호출 일 수 있습니다.)
편집 : 나는 이것이 사용될 시스템의 종류를 미리 알지 못하므로 많은 것을 가정 할 수는 없습니다. (저는 그런 이유로 Java를 사용하고 있습니다.)
편집 : 위의 코드에는 게시물을 작게 만드는 try..catch와 같은 항목이 없습니다