当前位置: 首页 > 知识库问答 >
问题:

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

欧阳杰
2023-03-14

我使用静态编程语言和vertx。在我的vertx应用程序中,我试图将ByteArray发送到另一个事件消费者。

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

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

        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,这样我就可以比较这两个变量了。

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

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

提前感谢您的帮助!

抢劫

共有1个答案

贡斌
2023-03-14

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

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

 类似资料:
  • 问题内容: 这是我尝试的错误消息。我究竟做错了什么? UnicodeEncodeError:’ascii’编解码器无法在位置37编码字符u’\ xa0’:序数不在范围内(128) UnicodeDecodeError:’ascii’编解码器无法解码位置37的字节0xc2:序数不在范围内(128) 问题答案: 您无法解码,也无法编码。尝试以另一种方式进行操作。

  • 以下是我尝试的错误信息。我做错了什么? UnicodeEncodeError:“ASCII”编解码器无法编码位置37中的字符U“\XA0”:序号不在范围(128)中

  • 问题内容: ’=?KOI8-R?B?W1JFUS0wMDI1NDEtNDc5NzddIO / h7yAi89TSz8rGwdLGz9IiIDs =?= \ r \ n \ t =?KOI8-R?B?Ry43MjkgKDEwKQ ==?=’ 如何将其转换为可读的内容?谢谢 ! 问题答案: email.header.decode_header(‘=?KOI8-R?B?W1JFUS0wMDI1NDEtN

  • 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是655

  • 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是655

  • 我们都知道计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是 65,小写字母 z 的编码是 122。 如果要表示中