encoding/decoding 字符串到 Kotlin ByteArray 时的 Vertx 事件总线和编码问题

Vertx event bus and encoding issues when encoding/decoding string to Kotlin ByteArray

我正在使用 Kotlin 和 vertx。在我的 vertx 应用程序中,我正在尝试将 ByteArray 发送给另一个事件使用者。

为此,我将其转换为字符串,然后在第二个处理程序中接收到它后,我将其转换回 ByteArray,但对象不相等。它们非常不同,我不知道为什么。

我的 2 个事件处理程序是:

        eb.consumer<JsonObject>("epos.print.print-image-from-path") { message ->
        GlobalScope.launch(vertx.dispatcher()) {
            var imagePath = message.body().get<String>("imagePath")

            var convertor = image2escpos.Image2ESCPOS()
            var bytes = convertor.printImage(imagePath)

            println( bytes.joinToString("") { String.format("%02X", (it.toInt() and 0xFF)) })

            queueJob(bytes.toTypedArray())

            temp1 = bytes

            eb.publish("epos.print.print-image-from-bitmap", json { obj("bytes" to String(bytes)) })
        }
    }

    eb.consumer<JsonObject>("epos.print.print-image-from-bitmap") { message ->
        GlobalScope.launch(vertx.dispatcher()) {
            var bytes = message.body().get<String>("bytes")
            var byteArray = bytes.toByteArray(StandardCharsets.UTF_8)

            println( byteArray.joinToString("") { String.format("%02X", (it.toInt() and 0xFF)) })

            println("OUTPUT")
            println(temp1)
            println(byteArray)
            println(temp1==byteArray)
        }
    }

我有私有变量: private lateinit var temp1:ByteArray 这样我就可以比较这两个变量。

我正在通过发送带有 json 正文的事件来调用“epos.print.print-image-from-path”方法,例如:{ "imagePath" : "/Users/XXXXXXX/Downloads/QR-Zed80.BMP" }

当 encoding/decoding 对象时我错过了什么。我不完全确定字符串与 ByteArray 的关系,但我需要在 2 个处理程序之间传递 ByteArray,而 String 似乎是事件总线上的唯一方式。

提前感谢您的帮助!

罗布

如果您不使用集群 Vert.x,您可以只发送和接收 ByteArray。

不过,您可能需要实施无操作编解码器: https://alexey-soshin.medium.com/understanding-vert-x-event-bus-c31759757ce8