code: package com.beijunyi.parallelgit.utils;
  
  import java.io.IOException;
  import java.io.InputStream;
  import javax.annotation.Nonnull;
  
  import com.beijunyi.parallelgit.utils.io.BlobSnapshot;
  import org.eclipse.jgit.lib.*;
  
  import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
  
  public final class BlobUtils {
  
    @Nonnull
    public static ObjectId insertBlob(byte[] data, Repository repo) throws IOException {
      try(ObjectInserter inserter = repo.newObjectInserter()) {
        ObjectId blobId = inserter.insert(OBJ_BLOB, data);
        inserter.flush();
        return blobId;
      }
    }
  
    public static long getBlobSize(AnyObjectId id, ObjectReader reader) throws IOException {
      return reader.getObjectSize(id, OBJ_BLOB);
    }
  
    public static long getBlobSize(AnyObjectId id, Repository repo) throws IOException {
      try(ObjectReader reader = repo.newObjectReader()) {
        return getBlobSize(id, reader);
      }
    }
  
    @Nonnull
    public static InputStream openBlob(AnyObjectId id, ObjectReader reader) throws IOException {
      return reader.open(id).openStream();
    }
  
    @Nonnull
    public static InputStream openBlob(AnyObjectId id, Repository repo) throws IOException {
      try(ObjectReader reader = repo.newObjectReader()) {
        return openBlob(id, reader);
      }
    }
  
    @Nonnull
    public static BlobSnapshot readBlob(ObjectId id, ObjectReader reader) throws IOException {
      return BlobSnapshot.load(id, reader);
    }
  
    @Nonnull
    public static BlobSnapshot readBlob(ObjectId id, Repository repo) throws IOException {
      try(ObjectReader reader = repo.newObjectReader()) {
        return readBlob(id, reader);
      }
    }
  
  }
  