From b8ebbb3e2f328de53607783dfba26142bb718435 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Wed, 7 Mar 2018 16:07:33 +0100 Subject: [PATCH] Attempt to improve reliability of StringSerializer --- .../protocol/primitive/serializer/StringSerializer.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt index 582a41b8b..300f25a87 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt @@ -10,7 +10,7 @@ import java.nio.charset.CharsetDecoder import java.nio.charset.CharsetEncoder abstract class StringSerializer( - private var encoder: CharsetEncoder, + private val encoder: CharsetEncoder, private val decoder: CharsetDecoder, private val trailingNullBytes: Int ) : Serializer<String?> { @@ -51,7 +51,7 @@ abstract class StringSerializer( val charBuffer = charBuffer(data.length) charBuffer.put(data) charBuffer.flip() - encoder = encoder.charset().newEncoder() + encoder.reset() val byteBuffer = encoder.encode(charBuffer) IntSerializer.serialize(buffer, byteBuffer.remaining() + trailingNullBytes, features) buffer.put(byteBuffer) @@ -71,7 +71,7 @@ abstract class StringSerializer( val charBuffer = charBuffer(data.length) charBuffer.put(data) charBuffer.flip() - encoder = encoder.charset().newEncoder() + encoder.reset() return encoder.encode(charBuffer) } } catch (e: Throwable) { @@ -88,6 +88,7 @@ abstract class StringSerializer( val limit = buffer.limit() buffer.limit(buffer.position() + len - trailingNullBytes) val charBuffer = charBuffer(len) + decoder.reset() decoder.decode(buffer, charBuffer, true) buffer.limit(limit) buffer.position(buffer.position() + trailingNullBytes) @@ -109,6 +110,7 @@ abstract class StringSerializer( val limit = buffer.limit() buffer.limit(buffer.position() + Math.max(0, len - trailingNullBytes)) val charBuffer = charBuffer(len) + decoder.reset() decoder.decode(buffer, charBuffer, true) buffer.limit(limit) buffer.position(buffer.position() + trailingNullBytes) -- GitLab