Переглянути джерело

将 jdk 模块依赖第三方包的功能迁移到 tool 模块, jdk 模块保持只依赖 jdk

reghao 4 місяців тому
батько
коміт
908a95397e

+ 0 - 12
jdk/pom.xml

@@ -17,18 +17,6 @@
     </properties>
 
     <dependencies>
-        <dependency>
-            <groupId>org.sejda.imageio</groupId>
-            <artifactId>webp-imageio</artifactId>
-            <version>0.1.6</version>
-        </dependency>
-
-        <dependency>
-            <groupId>net.coobird</groupId>
-            <artifactId>thumbnailator</artifactId>
-            <version>0.4.20</version>
-        </dependency>
-
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>

+ 1 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/media/model/AudioProps.java → jdk/src/main/java/cn/reghao/jutil/jdk/model/media/AudioProps.java

@@ -1,4 +1,4 @@
-package cn.reghao.jutil.jdk.media.model;
+package cn.reghao.jutil.jdk.model.media;
 
 /**
  * @author reghao

+ 1 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/media/model/MediaProps.java → jdk/src/main/java/cn/reghao/jutil/jdk/model/media/MediaProps.java

@@ -1,4 +1,4 @@
-package cn.reghao.jutil.jdk.media.model;
+package cn.reghao.jutil.jdk.model.media;
 
 import java.time.LocalDateTime;
 

+ 1 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/media/MediaQuality.java → jdk/src/main/java/cn/reghao/jutil/jdk/model/media/MediaQuality.java

@@ -1,4 +1,4 @@
-package cn.reghao.jutil.jdk.media;
+package cn.reghao.jutil.jdk.model.media;
 
 /**
  * 视频质量

+ 1 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/media/MediaResolution.java → jdk/src/main/java/cn/reghao/jutil/jdk/model/media/MediaResolution.java

@@ -1,4 +1,4 @@
-package cn.reghao.jutil.jdk.media;
+package cn.reghao.jutil.jdk.model.media;
 
 /**
  * 视频图像分辨率

+ 1 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/media/model/VideoProps.java → jdk/src/main/java/cn/reghao/jutil/jdk/model/media/VideoProps.java

@@ -1,4 +1,4 @@
-package cn.reghao.jutil.jdk.media.model;
+package cn.reghao.jutil.jdk.model.media;
 
 /**
  * @author reghao

+ 4 - 5
jdk/src/main/java/cn/reghao/jutil/jdk/media/FFmpegWrapper.java → jdk/src/main/java/cn/reghao/jutil/jdk/shell/FFmpegWrapper.java

@@ -1,11 +1,10 @@
-package cn.reghao.jutil.jdk.media;
+package cn.reghao.jutil.jdk.shell;
 
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
-import cn.reghao.jutil.jdk.shell.Shell;
-import cn.reghao.jutil.jdk.media.model.AudioProps;
-import cn.reghao.jutil.jdk.media.model.MediaProps;
-import cn.reghao.jutil.jdk.media.model.VideoProps;
+import cn.reghao.jutil.jdk.model.media.AudioProps;
+import cn.reghao.jutil.jdk.model.media.MediaProps;
+import cn.reghao.jutil.jdk.model.media.VideoProps;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;

+ 18 - 5
tool/pom.xml

@@ -34,11 +34,6 @@
             <version>4.5.13</version>
         </dependency>
 
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>1.15</version>
-        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
@@ -56,5 +51,23 @@
             <artifactId>jjwt-api</artifactId>
             <version>0.12.6</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.sejda.imageio</groupId>
+            <artifactId>webp-imageio</artifactId>
+            <version>0.1.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.20</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.10.1</version>
+        </dependency>
     </dependencies>
 </project>

+ 53 - 0
tool/src/main/java/cn/reghao/jutil/tool/json/JdkSerializer.java

@@ -0,0 +1,53 @@
+package cn.reghao.jutil.tool.json;
+
+import java.io.*;
+
+/**
+ * JDK 对象序列化器
+ *
+ * @author reghao
+ * @date 2022-05-21 13:49:18
+ */
+public class JdkSerializer {
+    public static byte[] serialize(Object object) {
+        if (object == null) {
+            return null;
+        } else {
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+            try {
+                (new ObjectOutputStream(stream)).writeObject(object);
+            } catch (IOException var3) {
+                throw new IllegalArgumentException("Could not serialize object of type: " + object.getClass(), var3);
+            }
+
+            return stream.toByteArray();
+        }
+    }
+
+    public static Object deserialize(byte[] bytes) {
+        if (bytes == null) {
+            return null;
+        } else {
+            try {
+                return deserialize(new ObjectInputStream(new ByteArrayInputStream(bytes)));
+            } catch (IOException var2) {
+                throw new IllegalArgumentException("Could not deserialize object", var2);
+            }
+        }
+    }
+
+    public static Object deserialize(ObjectInputStream stream) {
+        if (stream == null) {
+            return null;
+        } else {
+            try {
+                return stream.readObject();
+            } catch (IOException var2) {
+                throw new IllegalArgumentException("Could not deserialize object", var2);
+            } catch (ClassNotFoundException var3) {
+                throw new IllegalStateException("Could not deserialize object type", var3);
+            }
+        }
+    }
+}

+ 38 - 0
tool/src/main/java/cn/reghao/jutil/tool/json/JsonArrayDeserializer.java

@@ -0,0 +1,38 @@
+package cn.reghao.jutil.tool.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonParser;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * JSON 数组反序列化
+ *
+ * @author reghao
+ * @date 2020-11-11 16:57:04
+ */
+public class JsonArrayDeserializer<T> {
+    private final Gson gson = new GsonBuilder()
+            .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())
+            .create();
+
+    /**
+     * JSON 数组转换为对象集合
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:14
+     */
+    public List<T> fromJsonArray(String json, Class<T> clazz) {
+        JsonParser parser = new JsonParser();
+        List<T> list = new ArrayList<>();
+        parser.parse(json).getAsJsonArray().forEach(ele -> {
+            list.add(gson.fromJson(ele, clazz));
+        });
+
+        return list;
+    }
+}

+ 146 - 0
tool/src/main/java/cn/reghao/jutil/tool/json/JsonConverter.java

@@ -0,0 +1,146 @@
+package cn.reghao.jutil.tool.json;
+
+import cn.reghao.jutil.jdk.text.TextFile;
+import com.google.gson.*;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonToken;
+import com.google.gson.stream.JsonWriter;
+
+import java.io.*;
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * JSON 序列化/反序列化
+ *
+ * @author reghao
+ * @date 2020-11-11 16:57:04
+ */
+public class JsonConverter {
+    private static final TypeAdapter<Boolean> booleanAsIntAdapter = new TypeAdapter<>() {
+        @Override public void write(JsonWriter out, Boolean value) throws IOException {
+            if (value == null) {
+                out.nullValue();
+            } else {
+                out.value(value);
+            }
+        }
+        @Override public Boolean read(JsonReader in) throws IOException {
+            JsonToken peek = in.peek();
+            switch (peek) {
+                case BOOLEAN:
+                    return in.nextBoolean();
+                case NULL:
+                    in.nextNull();
+                    return null;
+                case NUMBER:
+                    return in.nextInt() != 0;
+                case STRING:
+                    String intStr = in.nextString();
+                    if (intStr.equalsIgnoreCase("true") || intStr.equalsIgnoreCase("false")) {
+                        return Boolean.parseBoolean(intStr);
+                    } else {
+                        Integer i = Integer.parseInt(intStr);
+                        return i != 0;
+                    }
+                default:
+                    throw new IllegalStateException("Expected BOOLEAN or NUMBER but was " + peek);
+            }
+        }
+    };
+    private static final Gson gson = new GsonBuilder()
+            .disableHtmlEscaping()
+            .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())
+            .registerTypeAdapter(Boolean.class, booleanAsIntAdapter)
+            .registerTypeAdapter(boolean.class, booleanAsIntAdapter)
+            .create();
+    private static final JsonParser jsonParser = new JsonParser();
+
+    /**
+     * 对象转换为 JSON
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:10
+     */
+    public static String objectToJson(Object object) {
+        return gson.toJson(object);
+    }
+
+    /**
+     * JSON 转换为对象
+     * TODO <T> 的含义
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:11
+     */
+    public static <T> T jsonToObject(String json, Class<T> clazz) {
+        return gson.fromJson(json, clazz);
+    }
+
+    /**
+     * 对泛型数据的反序列化
+     *
+     * @param
+     * @return
+     * @date 2021-05-26 下午3:38
+     */
+    public static <T> T jsonToObject(String json, Type type) {
+        return gson.fromJson(json, type);
+    }
+
+    public static <T> T jsonFileToObject(File jsonFile, Type type) {
+        try {
+            JsonReader reader = gson.newJsonReader(new InputStreamReader(new FileInputStream(jsonFile)));
+            return gson.fromJson(reader, type);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static <T> T jsonFileToObject(InputStreamReader streamReader, Type type) {
+        JsonReader reader = gson.newJsonReader(streamReader);
+        return gson.fromJson(reader, type);
+    }
+
+    public static <T> List<T> jsonToObjects(String json, Class<T> clazz) {
+        JsonParser parser = new JsonParser();
+        List<T> list = new ArrayList<>();
+        parser.parse(json).getAsJsonArray().forEach(ele -> {
+            list.add(gson.fromJson(ele, clazz));
+        });
+
+        return list;
+    }
+
+    /**
+     * JSON 文件转换为对象
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:11
+     */
+    public static JsonElement jsonToJsonElement(File jsonFile) {
+        String content = new TextFile().readFile(jsonFile.getAbsolutePath()).replace(System.lineSeparator(), "");
+        return jsonParser.parse(content);
+    }
+
+    public static JsonElement jsonToJsonElement(String json) {
+        return jsonParser.parse(json);
+    }
+
+    /**
+     * 对象集合转换为 JSON
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:10
+     */
+    public static <T> String listToJson(List<T> objects) {
+        return gson.toJson(objects);
+    }
+}

+ 30 - 0
tool/src/main/java/cn/reghao/jutil/tool/json/LocalDateTimeAdapter.java

@@ -0,0 +1,30 @@
+package cn.reghao.jutil.tool.json;
+
+import com.google.gson.*;
+
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * Gson 序列化/反序列化 Java8 LocalDateTime
+ *
+ * @author reghao
+ * @date 2021-03-04 19:34:31
+ */
+public class LocalDateTimeAdapter implements JsonSerializer<LocalDateTime>, JsonDeserializer<LocalDateTime> {
+    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    private final DateTimeFormatter formatter1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+
+    @Override
+    public JsonElement serialize(LocalDateTime localDateTime, Type typeOfSrc, JsonSerializationContext context) {
+        return new JsonPrimitive(localDateTime.format(formatter));
+    }
+
+    @Override
+    public LocalDateTime deserialize(JsonElement element, Type type, JsonDeserializationContext context)
+            throws JsonParseException {
+        String timestamp = element.getAsJsonPrimitive().getAsString();
+        return LocalDateTime.parse(timestamp, formatter);
+    }
+}

+ 1 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/media/ImageOps.java → tool/src/main/java/cn/reghao/jutil/tool/media/ImageOps.java

@@ -1,4 +1,4 @@
-package cn.reghao.jutil.jdk.media;
+package cn.reghao.jutil.tool.media;
 
 import net.coobird.thumbnailator.Thumbnails;