public CompletableFuture<Long> searchObjectId(long streamId, long startOffset) {
        return exec(() -> {
            readLock.lock();
            try {
                SparseRangeIndex sparseRangeIndex = streamRangeIndexMap.get(streamId);
                if (sparseRangeIndex == null) {
                    return -1L;
                }
                return LocalStreamRangeIndexCache.binarySearchObjectId(startOffset, sparseRangeIndex.getRangeIndexList());
            } finally {
                readLock.unlock();
            }
        });
    }
Search for the object with the maximum start offset less than or equal to the given start offset.
If not found, return -1.
s3stream/src/main/java/com/automq/stream/s3/index/LocalStreamRangeIndexCache.java