From 1ba02bb4127f04337c05129fcce466aa8fa9d050 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Thu, 24 Dec 2015 09:22:55 +0800 Subject: [PATCH] --- .../convert/ext/DLongSimpledCoder.java | 2 +- .../convert/json/DLongJsonSimpledCoder.java | 2 +- .../src/org/redkale/util/DLong.java | 25 +++++++++++++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/android-jdk6-redkale/src/org/redkale/convert/ext/DLongSimpledCoder.java b/android-jdk6-redkale/src/org/redkale/convert/ext/DLongSimpledCoder.java index d0f8844d5..d98daad09 100644 --- a/android-jdk6-redkale/src/org/redkale/convert/ext/DLongSimpledCoder.java +++ b/android-jdk6-redkale/src/org/redkale/convert/ext/DLongSimpledCoder.java @@ -36,7 +36,7 @@ public final class DLongSimpledCoder extends public DLong convertFrom(R in) { byte[] bs = bsSimpledCoder.convertFrom(in); if (bs == null) return null; - return new DLong(bs); + return DLong.create(bs); } } diff --git a/android-jdk6-redkale/src/org/redkale/convert/json/DLongJsonSimpledCoder.java b/android-jdk6-redkale/src/org/redkale/convert/json/DLongJsonSimpledCoder.java index a68019866..3c2770f4d 100644 --- a/android-jdk6-redkale/src/org/redkale/convert/json/DLongJsonSimpledCoder.java +++ b/android-jdk6-redkale/src/org/redkale/convert/json/DLongJsonSimpledCoder.java @@ -29,6 +29,6 @@ public class DLongJsonSimpledCoder extends JsonSimpledCoder { public DLong convertFrom(JsonReader in) { final String str = in.readString(); if (str == null) return null; - return new DLong(Utility.hexToBin(str)); + return DLong.create(Utility.hexToBin(str)); } } diff --git a/android-jdk6-redkale/src/org/redkale/util/DLong.java b/android-jdk6-redkale/src/org/redkale/util/DLong.java index d1a53f018..7cf402dc8 100644 --- a/android-jdk6-redkale/src/org/redkale/util/DLong.java +++ b/android-jdk6-redkale/src/org/redkale/util/DLong.java @@ -17,15 +17,17 @@ import java.util.*; */ public final class DLong extends Number implements Comparable { - private final byte[] bytes; + public static final DLong ZERO = new DLong(new byte[16]); - public DLong(long v1, long v2) { + protected final byte[] bytes; + + protected DLong(long v1, long v2) { //暂时不用 this.bytes = new byte[]{(byte) (v1 >> 56), (byte) (v1 >> 48), (byte) (v1 >> 40), (byte) (v1 >> 32), (byte) (v1 >> 24), (byte) (v1 >> 16), (byte) (v1 >> 8), (byte) v1, (byte) (v2 >> 56), (byte) (v2 >> 48), (byte) (v2 >> 40), (byte) (v2 >> 32), (byte) (v2 >> 24), (byte) (v2 >> 16), (byte) (v2 >> 8), (byte) v2}; } - public DLong(byte[] bytes) { + protected DLong(byte[] bytes) { if (bytes == null || bytes.length != 16) throw new NumberFormatException("Not 16 length bytes"); this.bytes = bytes; } @@ -38,8 +40,20 @@ public final class DLong extends Number implements Comparable { return bytes; } - public ByteBuffer putTo(ByteBuffer buffer) { - buffer.put(bytes); + public static DLong create(byte[] bytes) { + if (ZERO.equals(bytes)) return ZERO; + return new DLong(bytes); + } + + public static DLong read(ByteBuffer buffer) { + byte[] bs = new byte[16]; + buffer.get(bs); + if (ZERO.equals(bs)) return ZERO; + return new DLong(bs); + } + + public static ByteBuffer write(ByteBuffer buffer, DLong value) { + buffer.put(value.bytes); return buffer; } @@ -62,6 +76,7 @@ public final class DLong extends Number implements Comparable { @Override public String toString() { + if (this == ZERO) return "0"; return new String(Utility.binToHex(bytes)); }