【问题标题】:String to Bytes Conversion-If already byte and taking it as string字符串到字节的转换-如果已经是字节并将其作为字符串
【发布时间】:2014-10-04 09:47:35
【问题描述】:

我有一个 tibco 活动,它以字节为单位提供此输出。

现在我必须在我的 java 代码中使用它并将其发送到大型机队列。

我将其作为String bwmsg="wcLDxMXGx8=" 并在我的主要方法中...

byte[] bArray = bwmsg.getBytes();
BytesMessage bytmsg = session.createBytesMessage(); 
bytmsg.writeBytes(bArray);
mqSender.sendToMQ(bytmsg,connection,sender,session);

OUTPUT: 77634c44784d584778383d

我做错了吗? 已经是一个字节的东西我正在将它作为一个字符串读取,然后再次从中获取字节并执行解决方法。这是错的吗?

如果是,请告诉我如何将 bwmsg 字段作为字节传递给方法。

我在 Google 上搜索了许多链接,但没有得到很好的帮助。

【问题讨论】:

  • 我强烈怀疑该字符串是 base64 编码的。所以你不想打电话给getBytes() - 你想使用base64解码器。您需要更清楚地了解转化发生的地点和方式...
  • @JonSkeet:: 你能确认一下这种方法是错误的吗?我正在获取字节...将其作为字符串,然后从中获取字节并发送它们。
  • “我得到字节”是什么意思?你在这里太含糊了。我们所能看到的只是你从一个 string (String bwmsg = ...) 开始
  • @JonSkeet:我从一个字符串开始..但我是从 tibco BW 的其他系统得到的。这个输出以字节为单位......我假设它是字符串然后读取它的字节。如果我可以直接在那个字符串 bwmsg 的地方取字节,请告诉我。
  • tibco BW 是一个 SOA 框架。我通常使用生成的类进行 SOA 通信,它在例如之间进行转换。 SOA 消息中的 base64 编码 PC 数据到 java 中的 byte[] 变量。如果您手动解析 SOA 消息,则必须自己进行转换(例如 Java 8 提供 java.util.Base64.getDecoder())。你能分享更多关于你的设置的信息吗?您如何通过 tibco BW 接收数据?

标签: java jakarta-ee byte ibm-mq mq


【解决方案1】:

正如 Jon Skeet 在上面的评论中提到的那样。我只是把他的话变成了代码。

使用 javax.xml.bind.DatatypeConverter

static String bwmsg="wcLDxMXGx8=" static byte[] array = DatatypeConverter.parseBase64Binary(bwmsg);

并且在main方法中,将上面的字段设为静态,这样就可以直接在main方法中调用了。 public static void main(String [] args){ //other code here . . BytesMessage bytmsg = session.createBytesMessage(); bytmsg.writeBytes(array); mqSender.sendToMQ(bytmsg,connection,sender,session);

这解决了我的目的,希望它也能帮助其他人。

【讨论】:

    【解决方案2】:

    这与 Base64 无关。这是简单的编程 101。

    从字符串开始,然后将其转换为字节数组,最后打印出字节数组。

    您希望看到什么?您应该会看到一个字节数组。
    IE。 "wcLDxMXGx8=" 是 "77634c44784d584778383d"

    让我把它拼出来:

    "w" = 0x'77'
    "c" = 0x'63'
    "L" = 0x'4c'
    "D" = 0x'44'
    "x" = 0x'78'
    "M" = 0x'4d'
    "X" = 0x'58'
    "G" = 0x'47'
    "x" = 0x'78'
    "8" = 0x'38'
    "=" = 0x'3d'
    

    如果您希望它是人类可读的格式,则将字节数组转换回字符串,然后将其打印出来。

    即新字符串(bytemsg)

    【讨论】:

    • 谁告诉你它与 Base64 没有任何关系。Jon Skeet 在上面是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2019-10-10
    相关资源
    最近更新 更多