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
我正在使用 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