diff --git a/mirai-core/src/commonMain/kotlin/utils/io/serialization/tars/Tars.kt b/mirai-core/src/commonMain/kotlin/utils/io/serialization/tars/Tars.kt
index 852baf033..ee2f420ff 100644
--- a/mirai-core/src/commonMain/kotlin/utils/io/serialization/tars/Tars.kt
+++ b/mirai-core/src/commonMain/kotlin/utils/io/serialization/tars/Tars.kt
@@ -20,6 +20,7 @@ import kotlinx.serialization.modules.SerializersModule
 import net.mamoe.mirai.internal.utils.io.serialization.tars.internal.TarsDecoder
 import net.mamoe.mirai.internal.utils.io.serialization.tars.internal.TarsInput
 import net.mamoe.mirai.internal.utils.io.serialization.tars.internal.TarsOld
+import net.mamoe.mirai.utils.read
 
 /**
  * The main entry point to work with Tars serialization.
@@ -32,7 +33,9 @@ internal class Tars(
     private val old = TarsOld(charset)
 
     fun <T> dumpTo(serializer: SerializationStrategy<T>, ojb: T, output: Output) {
-        output.writePacket(old.dumpAsPacket(serializer, ojb))
+        old.dumpAsPacket(serializer, ojb).use {
+            output.writePacket(it)
+        }
     }
 
     fun <T> load(deserializer: DeserializationStrategy<T>, input: Input): T {
@@ -44,7 +47,9 @@ internal class Tars(
     }
 
     override fun <T> decodeFromByteArray(deserializer: DeserializationStrategy<T>, bytes: ByteArray): T {
-        return load(deserializer, ByteReadPacket(bytes))
+        bytes.read {
+            return load(deserializer, this)
+        }
     }
 
     companion object {
diff --git a/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt b/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt
index f66b04b1e..8a3d91986 100644
--- a/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt
+++ b/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt
@@ -52,7 +52,9 @@ internal fun <T : JceStruct> ByteReadPacket.readJceStruct(
     serializer: DeserializationStrategy<T>,
     length: Int = this.remaining.toInt()
 ): T {
-    return Tars.UTF_8.load(serializer, this.readPacketExact(length))
+    this.readPacketExact(length).use {
+        return Tars.UTF_8.load(serializer, it)
+    }
 }
 
 internal fun <T : JceStruct> BytePacketBuilder.writeJceRequestPacket(