diff --git a/src/org/redkale/convert/Reader.java b/src/org/redkale/convert/Reader.java index 1b940f77b..428aadceb 100644 --- a/src/org/redkale/convert/Reader.java +++ b/src/org/redkale/convert/Reader.java @@ -107,6 +107,13 @@ public abstract class Reader { */ public abstract byte readByte(); + /** + * 读取byte[] + * + * @return byte[] + */ + public abstract byte[] readByteArray(); + /** * 读取一个char值 * diff --git a/src/org/redkale/convert/Writer.java b/src/org/redkale/convert/Writer.java index dad5fb005..190165251 100644 --- a/src/org/redkale/convert/Writer.java +++ b/src/org/redkale/convert/Writer.java @@ -182,6 +182,13 @@ public abstract class Writer { */ public abstract void writeByte(byte value); + /** + * 写入byte[] + * + * @param values byte[] + */ + public abstract void writeByteArray(byte[] values); + /** * 写入一个char值 * diff --git a/src/org/redkale/convert/bson/BsonReader.java b/src/org/redkale/convert/bson/BsonReader.java index 930e8cdbd..2507aea81 100644 --- a/src/org/redkale/convert/bson/BsonReader.java +++ b/src/org/redkale/convert/bson/BsonReader.java @@ -248,6 +248,35 @@ public class BsonReader extends Reader { return content[++this.position]; } + @Override + public final byte[] readByteArray() { + int len = readArrayB(); + if (len == Reader.SIGN_NULL) return null; + if (len == Reader.SIGN_NOLENGTH) { + int size = 0; + byte[] data = new byte[8]; + while (hasNext()) { + if (size >= data.length) { + byte[] newdata = new byte[data.length + 4]; + System.arraycopy(data, 0, newdata, 0, size); + data = newdata; + } + data[size++] = readByte(); + } + readArrayE(); + byte[] newdata = new byte[size]; + System.arraycopy(data, 0, newdata, 0, size); + return newdata; + } else { + byte[] values = new byte[len]; + for (int i = 0; i < values.length; i++) { + values[i] = readByte(); + } + readArrayE(); + return values; + } + } + @Override public char readChar() { return (char) ((0xff00 & (content[++this.position] << 8)) | (0xff & content[++this.position])); diff --git a/src/org/redkale/convert/bson/BsonWriter.java b/src/org/redkale/convert/bson/BsonWriter.java index 3102951cc..cee5b5616 100644 --- a/src/org/redkale/convert/bson/BsonWriter.java +++ b/src/org/redkale/convert/bson/BsonWriter.java @@ -125,6 +125,22 @@ public class BsonWriter extends Writer { writeTo(value); } + @Override + public final void writeByteArray(byte[] values) { + if (values == null) { + writeNull(); + return; + } + writeArrayB(values.length); + boolean flag = false; + for (byte v : values) { + if (flag) writeArrayMark(); + writeByte(v); + flag = true; + } + writeArrayE(); + } + @Override public final void writeChar(final char value) { writeTo((byte) ((value & 0xFF00) >> 8), (byte) (value & 0xFF)); diff --git a/src/org/redkale/convert/ext/ByteArraySimpledCoder.java b/src/org/redkale/convert/ext/ByteArraySimpledCoder.java index 7596897ca..088c0d273 100644 --- a/src/org/redkale/convert/ext/ByteArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/ByteArraySimpledCoder.java @@ -11,7 +11,7 @@ import org.redkale.convert.Writer; /** * byte[] 的SimpledCoder实现 - * + * *

* 详情见: https://redkale.org * @@ -25,47 +25,12 @@ public final class ByteArraySimpledCoder ext @Override public void convertTo(W out, byte[] values) { - if (values == null) { - out.writeNull(); - return; - } - out.writeArrayB(values.length); - boolean flag = false; - for (byte v : values) { - if (flag) out.writeArrayMark(); - out.writeByte(v); - flag = true; - } - out.writeArrayE(); + out.writeByteArray(values); } @Override public byte[] convertFrom(R in) { - int len = in.readArrayB(); - if (len == Reader.SIGN_NULL) return null; - if (len == Reader.SIGN_NOLENGTH) { - int size = 0; - byte[] data = new byte[8]; - while (in.hasNext()) { - if (size >= data.length) { - byte[] newdata = new byte[data.length + 4]; - System.arraycopy(data, 0, newdata, 0, size); - data = newdata; - } - data[size++] = in.readByte(); - } - in.readArrayE(); - byte[] newdata = new byte[size]; - System.arraycopy(data, 0, newdata, 0, size); - return newdata; - } else { - byte[] values = new byte[len]; - for (int i = 0; i < values.length; i++) { - values[i] = in.readByte(); - } - in.readArrayE(); - return values; - } + return in.readByteArray(); } } diff --git a/src/org/redkale/convert/json/JsonReader.java b/src/org/redkale/convert/json/JsonReader.java index 05a35fe79..ba4621f4e 100644 --- a/src/org/redkale/convert/json/JsonReader.java +++ b/src/org/redkale/convert/json/JsonReader.java @@ -453,6 +453,35 @@ public class JsonReader extends Reader { return (byte) readInt(); } + @Override + public final byte[] readByteArray() { + int len = readArrayB(); + if (len == Reader.SIGN_NULL) return null; + if (len == Reader.SIGN_NOLENGTH) { + int size = 0; + byte[] data = new byte[8]; + while (hasNext()) { + if (size >= data.length) { + byte[] newdata = new byte[data.length + 4]; + System.arraycopy(data, 0, newdata, 0, size); + data = newdata; + } + data[size++] = readByte(); + } + readArrayE(); + byte[] newdata = new byte[size]; + System.arraycopy(data, 0, newdata, 0, size); + return newdata; + } else { + byte[] values = new byte[len]; + for (int i = 0; i < values.length; i++) { + values[i] = readByte(); + } + readArrayE(); + return values; + } + } + @Override public final char readChar() { return (char) readInt(); diff --git a/src/org/redkale/convert/json/JsonWriter.java b/src/org/redkale/convert/json/JsonWriter.java index 83c864fe6..c6b37698a 100644 --- a/src/org/redkale/convert/json/JsonWriter.java +++ b/src/org/redkale/convert/json/JsonWriter.java @@ -188,6 +188,22 @@ public class JsonWriter extends Writer { writeInt(value); } + @Override + public final void writeByteArray(byte[] values) { + if (values == null) { + writeNull(); + return; + } + writeArrayB(values.length); + boolean flag = false; + for (byte v : values) { + if (flag) writeArrayMark(); + writeByte(v); + flag = true; + } + writeArrayE(); + } + @Override public final void writeChar(char value) { writeInt(value);