/* * Copyright (C) 2014 Indeed Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package com.indeed.imhotep.archive; import com.google.common.io.ByteStreams; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.annotation.Nonnull; /** * @author jsgroth */ public final class ArchiveUtils { private ArchiveUtils() {} public static MessageDigest getMD5Digest() { try { return MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } public static void streamCopy(InputStream is, OutputStream os, long bytesToCopy) throws IOException { final byte[] buf = new byte[8192]; while (bytesToCopy > 0) { final int n = (int)Math.min(bytesToCopy, buf.length); ByteStreams.readFully(is, buf, 0, n); os.write(buf, 0, n); bytesToCopy -= n; } os.flush(); } /** * Converts a byte array to a hex string. The String returned * will be of length exactly {@code bytes.length * 2}. */ @Nonnull public static String toHex(@Nonnull final byte[] bytes) { StringBuilder buf = new StringBuilder(bytes.length * 2); for (byte b : bytes) { String hexDigits = Integer.toHexString((int) b & 0x00ff); if (hexDigits.length() == 1) { buf.append('0'); } buf.append(hexDigits); } return buf.toString(); } }