read (byte []) 대신 파일에 readFully()
을 사용하면 처리 시간이 크게 줄어 듭니다. 그러나 readFully는 양날 검이 될 수도 있습니다. 실수로 거대한 멀티 기가 바이트 파일을 읽으려고하면 소리가 질 수 있습니다. 내가 대신 사용한다면ReadFully() 질식 위험에 처해 있습니까?
public static byte[] createChecksum(File log, String type) throws Exception {
DataInputStream fis = new DataInputStream(new FileInputStream(log));
Long len = log.length();
byte[] buffer = new byte[len.intValue()];
fis.readFully(buffer); // TODO: readFully may come at the risk of
// choking on a huge file.
fis.close();
MessageDigest complete = MessageDigest.getInstance(type);
complete.update(buffer);
return complete.digest();
}
: 여기
함수 I는 SHA-256 체크섬을 생성하는 데 사용하고있다
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(log)));
겠습니까을 이러한 위험을 allieviate인가? 아니면 ... 모든 바이트가 읽힐 때까지 항상 읽어 들인 바이트의 양을 제어하고 루프를 사용하기위한 최상의 옵션입니다 (데이터 크기를 가꿀 수없는 상황에서)?
(MessageDigest API가 한 번에 전체 바이트 배열을 사용하기 때문에 생각해보십시오. 한 번에 모든 데이터를 채우지 않고 체크섬을 얻는 방법을 모르지만 다른 질문이 있다고 생각합니다.
사용중인'update()'메소드가 모든 데이터를 요구하지는 않습니다. 다이제스트 당 여러 번 호출 할 수 있습니다. – erickson