1、场景描述

开发完一个功能,有一段代码,第一次维护平台,想着如何优化下,就问了问AI,看看。

@Override
    public String getURLWatermark(String key, String word) {
        if(StringUtils.isBlank(key)) {
            return null;
        }
        if (key.startsWith("http")) {
            return key;
        }
        Integer minute = 30;
        Date expires = new Date(System.currentTimeMillis() + minute * 60 * 1000);
        Map<String, String> parameter = new HashMap<>(1);

        String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
        word = word + today;

        String encode = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(word.getBytes(StandardCharsets.UTF_8));
        parameter.put(String.format(watermarkParam, encode), "1");

        Boolean sensitive = fileExists(key, true);
        CloudBucket bucket = sensitive ? CloudBucket.COS_CHABOSHI_SECURE : CloudBucket.COS_CHABOSHI;
        String bucketName = bucket.getBucketName();

        Map<String, String> headers = new HashMap<String, String>(1);
        URL url = cosClient.generatePresignedUrl(bucketName, key, expires, HttpMethodName.GET, headers, parameter);
        String urlStr = url.toString();
        return urlStr.replace(ORIGIN_PRIVATE_URL, PRIVATE_URL);
    }

2、分别对比

deepseek

@Override
public String getURLWatermark(String key, String word) {
    // 1. 参数校验
    if (StringUtils.isBlank(key)) {
        return null;
    }
    if (key.startsWith("http")) {
        return key;
    }

    // 2. 设置过期时间(30分钟后)
    final int EXPIRE_MINUTES = 30;
    Date expires = new Date(System.currentTimeMillis() + EXPIRE_MINUTES * 60 * 1000);

    // 3. 生成带日期的水印文字
    String today = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE); // yyyyMMdd
    String watermarkText = StringUtils.isBlank(word) ? today : word + today;

    // 4. Base64 URL编码
    String encodedText = Base64.getUrlEncoder()
            .withoutPadding()
            .encodeToString(watermarkText.getBytes(StandardCharsets.UTF_8));

    // 5. 构建水印参数
    Map<String, String> parameters = Collections.singletonMap(
            String.format(watermarkParam, encodedText), 
            "1"
    );

    // 6. 判断是否敏感文件,选择存储桶
    boolean isSensitive = fileExists(key, true);
    CloudBucket bucket = isSensitive ? CloudBucket.COS_CHABOSHI_SECURE : CloudBucket.COS_CHABOSHI;

    // 7. 生成预签名URL
    URL presignedUrl = cosClient.generatePresignedUrl(
            bucket.getBucketName(),
            key,
            expires,
            HttpMethodName.GET,
            Collections.emptyMap(), // headers (空Map更高效)
            parameters
    );

    // 8. 替换URL域名(私有 → 公开)
    return presignedUrl.toString().replace(ORIGIN_PRIVATE_URL, PRIVATE_URL);
}

kimi

private static final int EXPIRE_MINUTES = 30;
private static final long EXPIRE_MILLIS   = EXPIRE_MINUTES * 60L * 1000L;

private static final Base64.Encoder BASE64_URL_ENCODER =
        Base64.getUrlEncoder().withoutPadding();

private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyyMMdd");

private static final ZoneId ZONE_ID = ZoneId.systemDefault();

@Override
public String getURLWatermark(String key, String word) {
    if (StringUtils.isBlank(key)) {
        return null;
    }
    if (key.startsWith("http")) {
        return key;
    }

    // 1. 过期时间
    Date expires = new Date(System.currentTimeMillis() + EXPIRE_MILLIS);

    // 2. 生成水印参数
    String today = LocalDate.now(ZONE_ID).format(DATE_FMT);
    String watermark = word + today;
    String encodedWatermark = BASE64_URL_ENCODER.encodeToString(
            watermark.getBytes(StandardCharsets.UTF_8));

    Map<String, String> parameters = Collections.singletonMap(
            String.format(watermarkParam, encodedWatermark), "1");

    // 3. 选择 bucket
    CloudBucket bucket = fileExists(key, true)
            ? CloudBucket.COS_CHABOSHI_SECURE
            : CloudBucket.COS_CHABOSHI;

    // 4. 生成预签名 URL
    URL url = cosClient.generatePresignedUrl(
            bucket.getBucketName(), key, expires,
            HttpMethodName.GET, Collections.emptyMap(), parameters);

    // 5. 替换域名
    return url.toString().replace(ORIGIN_PRIVATE_URL, PRIVATE_URL);
}

3、你喜欢哪个

都很棒,两个都喜欢。我直接用的kimi,哈哈。deepseek也看了下,对齐的,注释写的很好。

两者就是代码风格上,一丢丢区别。注释更详细

维度 kimi deepseek
静态变量 提取为公共的 未提取
注释 也还可以 更加详细
时间处理 已处理 已处理
其他 都一样,都很棒

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐