From 73eb306eb27168bcc927508963b5406e189a47ad Mon Sep 17 00:00:00 2001 From: redkale Date: Sun, 29 Sep 2024 00:23:01 +0800 Subject: [PATCH] protobuf --- .../redkale/convert/bson/BsonByteBufferReader.java | 1 - .../redkale/convert/bson/BsonByteBufferWriter.java | 2 +- .../redkale/convert/json/JsonByteBufferReader.java | 2 +- .../redkale/convert/json/JsonByteBufferWriter.java | 11 +++++++++++ .../convert/pb/ProtobufByteBufferWriter.java | 14 +++++++++++++- .../org/redkale/convert/pb/ProtobufMapEncoder.java | 2 +- .../org/redkale/convert/pb/ProtobufReader.java | 1 - .../redkale/test/convert/bson/BsonMainTest.java | 6 +++--- 8 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/redkale/convert/bson/BsonByteBufferReader.java b/src/main/java/org/redkale/convert/bson/BsonByteBufferReader.java index ee015db7f..2ad068649 100644 --- a/src/main/java/org/redkale/convert/bson/BsonByteBufferReader.java +++ b/src/main/java/org/redkale/convert/bson/BsonByteBufferReader.java @@ -67,7 +67,6 @@ public class BsonByteBufferReader extends BsonReader { /** * 判断下一个非空白字节是否为[ * - * @param member DeMember * @param typevals byte[] * @param componentDecoder Decodeable * @return 数组长度或 SIGN_NULL diff --git a/src/main/java/org/redkale/convert/bson/BsonByteBufferWriter.java b/src/main/java/org/redkale/convert/bson/BsonByteBufferWriter.java index df966a65e..e434949c8 100644 --- a/src/main/java/org/redkale/convert/bson/BsonByteBufferWriter.java +++ b/src/main/java/org/redkale/convert/bson/BsonByteBufferWriter.java @@ -137,7 +137,7 @@ public class BsonByteBufferWriter extends BsonWriter { @Override public final byte[] toArray() { - throw new UnsupportedOperationException("Not supported yet."); // 无需实现 + return toByteArray().getBytes(); } @Override diff --git a/src/main/java/org/redkale/convert/json/JsonByteBufferReader.java b/src/main/java/org/redkale/convert/json/JsonByteBufferReader.java index 10be8f0e7..eb1ff9f5d 100644 --- a/src/main/java/org/redkale/convert/json/JsonByteBufferReader.java +++ b/src/main/java/org/redkale/convert/json/JsonByteBufferReader.java @@ -25,7 +25,7 @@ public class JsonByteBufferReader extends JsonReader { private ByteBuffer[] buffers; private ByteBuffer currentBuffer; - + private int currBufIndex = 0; protected JsonByteBufferReader(ByteBuffer... buffers) { diff --git a/src/main/java/org/redkale/convert/json/JsonByteBufferWriter.java b/src/main/java/org/redkale/convert/json/JsonByteBufferWriter.java index 55d9c8405..6d5ebeb97 100644 --- a/src/main/java/org/redkale/convert/json/JsonByteBufferWriter.java +++ b/src/main/java/org/redkale/convert/json/JsonByteBufferWriter.java @@ -65,6 +65,17 @@ public class JsonByteBufferWriter extends JsonWriter { return this.buffers; } + public ByteArray toByteArray() { + ByteArray array = new ByteArray(); + if (buffers != null) { + for (ByteBuffer buf : toBuffers()) { + array.put(buf); + buf.flip(); + } + } + return array; + } + public int count() { if (this.buffers == null) { return 0; diff --git a/src/main/java/org/redkale/convert/pb/ProtobufByteBufferWriter.java b/src/main/java/org/redkale/convert/pb/ProtobufByteBufferWriter.java index 09de1b353..5efe7b9b9 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufByteBufferWriter.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufByteBufferWriter.java @@ -8,6 +8,7 @@ package org.redkale.convert.pb; import java.nio.ByteBuffer; import java.util.Objects; import java.util.function.Supplier; +import org.redkale.util.ByteArray; import org.redkale.util.Utility; /** @author zhangjx */ @@ -48,6 +49,17 @@ public class ProtobufByteBufferWriter extends ProtobufWriter { return this.buffers; } + public ByteArray toByteArray() { + ByteArray array = new ByteArray(); + if (buffers != null) { + for (ByteBuffer buf : toBuffers()) { + array.put(buf); + buf.flip(); + } + } + return array; + } + @Override protected int expand(final int byteLength) { if (this.buffers == null) { @@ -154,7 +166,7 @@ public class ProtobufByteBufferWriter extends ProtobufWriter { @Override public final byte[] toArray() { - throw new UnsupportedOperationException("Not supported yet."); // 无需实现 + return toByteArray().getBytes(); } @Override diff --git a/src/main/java/org/redkale/convert/pb/ProtobufMapEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufMapEncoder.java index 1a79a2fc7..0e31c9ad6 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufMapEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufMapEncoder.java @@ -52,7 +52,7 @@ public class ProtobufMapEncoder extends MapEncoder { kencoder.convertTo(tmp, key); tmp.writeTag(valTag); vencoder.convertTo(tmp, v); - + out.writeTuple(tmp); out.offerChild(tmp); } diff --git a/src/main/java/org/redkale/convert/pb/ProtobufReader.java b/src/main/java/org/redkale/convert/pb/ProtobufReader.java index fa9f724df..84c56476e 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufReader.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufReader.java @@ -137,7 +137,6 @@ public class ProtobufReader extends Reader { /** * 判断下一个非空白字符是否为[ * - * @param member DeMember * @param componentDecoder Decodeable * @return SIGN_VARIABLE 或 SIGN_NULL */ diff --git a/src/test/java/org/redkale/test/convert/bson/BsonMainTest.java b/src/test/java/org/redkale/test/convert/bson/BsonMainTest.java index c1ffacd84..151d71729 100644 --- a/src/test/java/org/redkale/test/convert/bson/BsonMainTest.java +++ b/src/test/java/org/redkale/test/convert/bson/BsonMainTest.java @@ -5,8 +5,6 @@ */ package org.redkale.test.convert.bson; -import org.redkale.test.convert.SimpleEntity; -import org.redkale.test.convert.SimpleChildEntity; import java.io.*; import java.nio.ByteBuffer; import java.util.*; @@ -15,6 +13,8 @@ import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.bson.*; import org.redkale.convert.json.JsonConvert; import org.redkale.persistence.*; +import org.redkale.test.convert.SimpleChildEntity; +import org.redkale.test.convert.SimpleEntity; import org.redkale.util.*; /** @author zhangjx */ @@ -88,7 +88,7 @@ public class BsonMainTest { final int len = bytes2.length; BsonByteBufferWriter writer = convert.pollWriter(() -> ByteBuffer.allocate(len / 2)); convert.convertTo(writer, bean); - bytes2 = writer.toArray(); + bytes2 = writer.toByteArray().getBytes(); System.out.println(convert.convertFrom(ComplextEntity.class, bytes2).toString()); Assertions.assertEquals( "{\"chname\":\"\",\"flag\":true,\"userid\":0}",