工作纪实62-设计阶段的容量考究计算

很多时候要设计消息、数据库字段、以及各种中间件的存储限制,要根据业务情况来设计字段的容量和类型选择,找gpt写了个方法,仅供参考

import java.nio.charset.Charset;

public class CharacterStorageCalculation {

    /**
     * 计算指定字节数和编码下可以存储的英文字符数量
     * @param totalBytes 总字节数
     * @param charsetName 编码名称,如 "UTF-8", "GBK"
     * @return 可存储的英文字符数量
     */
    public static int calculateEnglishCharacters(int totalBytes, String charsetName) {
        Charset charset = Charset.forName(charsetName);
        int bytesPerCharacter;
        if (charset.name().equals("UTF-8")) {
            bytesPerCharacter = 1;
        } else if (charset.name().equals("GBK")) {
            bytesPerCharacter = 1;
        } else {
            throw new IllegalArgumentException("不支持的编码: " + charsetName);
        }
        return totalBytes / bytesPerCharacter;
    }

    /**
     * 计算指定字节数和编码下可以存储的汉字数量
     * @param totalBytes 总字节数
     * @param charsetName 编码名称,如 "UTF-8", "GBK"
     * @return 可存储的汉字数量
     */
    public static int calculateChineseCharacters(int totalBytes, String charsetName) {
        Charset charset = Charset.forName(charsetName);
        int bytesPerCharacter;
        if (charset.name().equals("UTF-8")) {
            bytesPerCharacter = 3;
        } else if (charset.name().equals("GBK")) {
            bytesPerCharacter = 2;
        } else {
            throw new IllegalArgumentException("不支持的编码: " + charsetName);
        }
        return totalBytes / bytesPerCharacter;
    }

    public static void main(String[] args) {
        int totalBytes = 128 * 1024; // 128KB 转换为字节

        // 计算 UTF - 8 编码下的存储数量
        int utf8EnglishCount = calculateEnglishCharacters(totalBytes, "UTF-8");
        int utf8ChineseCount = calculateChineseCharacters(totalBytes, "UTF-8");
        System.out.println("在 UTF - 8 编码下,128KB 可以存储 " + utf8EnglishCount + " 个英文字符。");
        System.out.println("在 UTF - 8 编码下,128KB 可以存储 " + utf8ChineseCount + " 个汉字。");

        // 计算 GBK 编码下的存储数量
        int gbkEnglishCount = calculateEnglishCharacters(totalBytes, "GBK");
        int gbkChineseCount = calculateChineseCharacters(totalBytes, "GBK");
        System.out.println("在 GBK 编码下,128KB 可以存储 " + gbkEnglishCount + " 个英文字符。");
        System.out.println("在 GBK 编码下,128KB 可以存储 " + gbkChineseCount + " 个汉字。");
    }
}    

小伙伴们还是要避免拿来就用的规则,还是要亲自做测试!

你可能感兴趣的:(工作纪实,java,算法,开发语言)