Skip to content

Commit 1b6b2dd

Browse files
committed
Add ChunkedDecoder support
1 parent 2673d16 commit 1b6b2dd

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

formats/json-tests/commonTest/src/kotlinx/serialization/efficientBinaryFormat/ByteReadingBuffer.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,16 @@ class ByteReadingBuffer(val buffer: ByteArray) {
6565
return chars.concatToString()
6666
}
6767

68+
fun readString(consumeChunk: (String) -> Unit) {
69+
val len = readInt()
70+
var remaining = len
71+
while (remaining > 1024) {
72+
remaining -= 1024
73+
val chunk = CharArray(1024) { readChar() }
74+
consumeChunk(chunk.concatToString())
75+
}
76+
val chars = CharArray(remaining) { readChar() }
77+
consumeChunk(chars.concatToString())
78+
}
79+
6880
}

formats/json-tests/commonTest/src/kotlinx/serialization/efficientBinaryFormat/EfficientBinaryFormat.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import kotlinx.serialization.SerializationStrategy
1111
import kotlinx.serialization.descriptors.SerialDescriptor
1212
import kotlinx.serialization.encoding.AbstractDecoder
1313
import kotlinx.serialization.encoding.AbstractEncoder
14+
import kotlinx.serialization.encoding.ChunkedDecoder
1415
import kotlinx.serialization.encoding.CompositeDecoder
1516
import kotlinx.serialization.encoding.CompositeEncoder
1617
import kotlinx.serialization.modules.EmptySerializersModule
@@ -63,7 +64,7 @@ class EfficientBinaryFormat(
6364

6465
}
6566

66-
class Decoder(override val serializersModule: SerializersModule, private val reader: ByteReadingBuffer) : AbstractDecoder() {
67+
class Decoder(override val serializersModule: SerializersModule, private val reader: ByteReadingBuffer) : AbstractDecoder(), ChunkedDecoder {
6768

6869
constructor(serializersModule: SerializersModule, bytes: ByteArray) : this(
6970
serializersModule,
@@ -91,6 +92,11 @@ class EfficientBinaryFormat(
9192

9293
override fun decodeString(): String = reader.readString()
9394

95+
@ExperimentalSerializationApi
96+
override fun decodeStringChunked(consumeChunk: (String) -> Unit) {
97+
reader.readString(consumeChunk)
98+
}
99+
94100
override fun decodeEnum(enumDescriptor: SerialDescriptor): Int = reader.readInt()
95101

96102
override fun decodeNotNullMark(): Boolean = decodeBoolean()

0 commit comments

Comments
 (0)