cleanup (inspection "Java | Class structure | Utility class is not 'final'")
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / storage / MurmurHashingService.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package org.jetbrains.jps.incremental.storage;
3
4 import com.google.common.hash.Hasher;
5 import com.google.common.hash.Hashing;
6 import org.jetbrains.annotations.NotNull;
7
8 import java.io.File;
9 import java.io.FileInputStream;
10 import java.io.IOException;
11 import java.nio.ByteBuffer;
12 import java.nio.channels.FileChannel;
13 import java.nio.charset.StandardCharsets;
14
15 final class MurmurHashingService {
16   static final int HASH_SIZE = 16;
17
18   static byte[] getStringHash(@NotNull String hashableString) {
19     Hasher hasher = Hashing.murmur3_128().newHasher();
20     hasher.putString(hashableString, StandardCharsets.UTF_8);
21     return hasher.hash().asBytes();
22   }
23
24   static byte[] getFileHash(@NotNull File file) throws IOException {
25     Hasher hasher = Hashing.murmur3_128().newHasher();
26     try (FileInputStream fis = new FileInputStream(file); FileChannel fileChannel = fis.getChannel()) {
27       ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024);
28       while(fileChannel.read(buffer) > 0) {
29         buffer.flip();
30         hasher.putBytes(buffer);
31         buffer.clear();
32       }
33     }
34     return hasher.hash().asBytes();
35   }
36 }