From 4c4c6f4c6ab3e731ad8d78df91dcfea6c1658fce Mon Sep 17 00:00:00 2001 From: yanxutao89 <910135896@qq.com> Date: Wed, 9 Jul 2025 23:18:58 +0800 Subject: [PATCH] fix build warning and dot missing in graavlvm native mode, for issue #3587 --- .../main/java/com/alibaba/fastjson2/util/IOUtils.java | 10 ++++------ .../main/java/com/alibaba/fastjson2/util/JDKUtils.java | 9 +++------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java b/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java index 1750dc9a5..26657a938 100644 --- a/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java +++ b/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java @@ -61,7 +61,6 @@ public class IOUtils { }; private static final short ZERO_DOT_LATIN1; - private static final int ZERO_DOT_UTF16; static { short[] shorts = new short[]{ @@ -105,7 +104,6 @@ public class IOUtils { DIGITS_K_64[i] = c0 + v; } ZERO_DOT_LATIN1 = UNSAFE.getShort(new byte[] {'0', '.'}, ARRAY_BYTE_BASE_OFFSET); - ZERO_DOT_UTF16 = UNSAFE.getInt(new char[] {'0', '.'}, ARRAY_CHAR_BASE_OFFSET); } private static short digitPair(int value) { @@ -343,11 +341,11 @@ public class IOUtils { int unscaleValSize = stringSize(unscaledVal); int insertionPoint = unscaleValSize - scale; if (insertionPoint == 0) { - putIntUnaligned(buf, off, ZERO_DOT_UTF16); - off += 2; + buf[off++] = '0'; + buf[off++] = '.'; } else if (insertionPoint < 0) { - putIntUnaligned(buf, off, ZERO_DOT_UTF16); - off += 2; + buf[off++] = '0'; + buf[off++] = '.'; for (int i = 0; i < -insertionPoint; i++) { putChar(buf, off++, '0'); diff --git a/core/src/main/java/com/alibaba/fastjson2/util/JDKUtils.java b/core/src/main/java/com/alibaba/fastjson2/util/JDKUtils.java index 8d6f8db5a..33d470b38 100644 --- a/core/src/main/java/com/alibaba/fastjson2/util/JDKUtils.java +++ b/core/src/main/java/com/alibaba/fastjson2/util/JDKUtils.java @@ -70,22 +70,19 @@ public class JDKUtils { static { Unsafe unsafe; - long offset, charOffset; try { Field theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafeField.setAccessible(true); unsafe = (Unsafe) theUnsafeField.get(null); - offset = unsafe.arrayBaseOffset(byte[].class); - charOffset = unsafe.arrayBaseOffset(char[].class); + ARRAY_BYTE_BASE_OFFSET = unsafe.arrayBaseOffset(byte[].class); + ARRAY_CHAR_BASE_OFFSET = unsafe.arrayBaseOffset(char[].class); } catch (Throwable e) { throw new JSONException("init unsafe error", e); } UNSAFE = unsafe; - ARRAY_BYTE_BASE_OFFSET = offset; - ARRAY_CHAR_BASE_OFFSET = charOffset; - if (offset == -1) { + if (ARRAY_BYTE_BASE_OFFSET == -1 || ARRAY_CHAR_BASE_OFFSET == -1) { throw new JSONException("init JDKUtils error", initErrorLast); }