diff --git a/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt
index c1a4ba8a136b8a8dbca70d348e553a27d2125465..c8168c7cbfd57691e123274658fea8e3583e458e 100644
--- a/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt
+++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt
@@ -85,9 +85,12 @@ internal class WebSocket(private val socket: Socket) : SocketInterface {
 
     private fun decodeBinary(length: ULong, key: UByteArray): UByteArray {
         val decoded = ByteArrayOutputStream()
-        for (i in 0 until length.toInt()) {
-            decoded.write(currentReceivedData.read() xor key[i and 0x3])
+
+        val bytes = currentReceivedData.readBytes(length.toInt()).mapIndexed { index, uByte ->
+            uByte xor key[index and 0x3]
         }
+        decoded.write(bytes.toUByteArray())
+
         currentReceivedData.shift()
         return decoded.toByteArray()
     }