فهرست منبع

feat:
用户头像添加弱引用缓存

18339543638 2 سال پیش
والد
کامیت
0c0041debc
1فایلهای تغییر یافته به همراه17 افزوده شده و 13 حذف شده
  1. 17 13
      tr-framework/src/main/java/cn/tr/core/utils/AvatarUtil.java

+ 17 - 13
tr-framework/src/main/java/cn/tr/core/utils/AvatarUtil.java

@@ -10,7 +10,9 @@ import java.awt.geom.RoundRectangle2D;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.Map;
 import java.util.Random;
+import java.util.WeakHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -22,6 +24,7 @@ import java.util.regex.Pattern;
  */
 
 public class AvatarUtil {
+    private volatile static Map<String, String> avatarMap=new WeakHashMap<>();
     /**
      * 圆角大小
      */
@@ -35,15 +38,20 @@ public class AvatarUtil {
      * @return  头像的base64存储
      */
     public static String generateAvatar(String name){
-        if(StrUtil.isBlank(name)){
-            name="匿名";
+        String key=new String(StrUtil.trim(name));;
+        String result = avatarMap.get(key);
+        if(StrUtil.isNotBlank(result)){
+            return result;
+        }
+        if(StrUtil.isBlank(key)){
+            key="匿名";
         }
         int width = 100;
         int height = 100;
-        int nameLen = name.length();
+//        int nameLen = name.length();
+
 
-        name=StrUtil.trim(name);
-        String nameWritten=StrUtil.sub(name,0,1);
+        String nameWritten=StrUtil.sub(key,0,1);
 //        // 如果用户输入的姓名少于等于2个字符,不用截取
 //        if (nameLen == 1) {
 //            nameWritten = name;
@@ -116,11 +124,12 @@ public class AvatarUtil {
             ImageIO.write(rounded, "png", outputStream);
             byte[] bytes = outputStream.toByteArray();
             IoUtil.close(outputStream);
-            return Base64Utils.encodeToString(bytes);
+            result= Base64Utils.encodeToString(bytes);
         }catch (Exception e){
-            return "";
+            result="";
         }
-
+        avatarMap.put(key,result);
+        return result;
     }
 
 
@@ -173,9 +182,4 @@ public class AvatarUtil {
         g2.dispose();
         return output;
     }
-
-    public static void main(String[] args) {
-        System.out.println(generateAvatar("测试1"));
-    }
-
 }