在 Java 中有效地获得 git blob 大小

Obtain a git blob size efficiently in Java

我有一堆 object id 引用给定 git 存储库中的 blob。我想获取他们未压缩的内容占用的字节数,最好使用JGit。也就是说,一旦在工作区中签出,相应文件将包含的字节数。

此信息是否存储在 git blob 本身中?简要讨论了 here 但我不明白 blob header 中的 blob 大小是否对应于膨胀后的大小,或者其他东西(例如存储增量所需的大小)。

我可以通过 JGit 访问 blob 大小:给定一个 FileRepository repository 并一劳永逸地初始化一个 ObjectLoader reader = repository.newObjectReader(),看来我寻求的大小可以使用 reader.open(objectId).getSize().但这很慢。获得 blob 大小通常需要几十毫秒。如果我理解正确的话,JGit 会读取整个 blob,至少在某些情况下是这样。 (我问了一个类似的问题 here 但没有得到回复。)

我的问题是:我可以使用 JGit 更快地获得 blob 大小吗?或者,我是否可以至少在原则上通过读取 blob 数据的某些部分来实现我想要的,也就是说,这些信息是以直接形式存储在某处,还是可推导的,或者我是否绝对需要在知道之前读取和膨胀整个 blob它的大小?

使用ObjectReader#getObjectSize,这将只读取对象的大小,而不是整个对象。

open调用对象会将其全部加载到内存中,这是不必要的。