【问题标题】:Convert a String representation of byte[] back to an byte[]将 byte[] 的字符串表示形式转换回 byte[]
【发布时间】:2018-03-27 09:25:08
【问题描述】:

我有一个String 变量,比如string,我将它转换为byte[],然后我使用Base64 将其编码为byte[],比如encodedByteArr。使用以下代码:

String string = "Test";
byte[] encodedByteArr= null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(check);
encodedByteArr= Base64.encodeBase64(bos.toByteArray());
oos.flush();
oos.close();
bos.close();
System.out.println("Encoded value is:- "+encodedByteArr);

输出是:

编码值为:- [B@5fd0d5ae

现在,我在另一种方法中收到与String 相同的编码值,这意味着:

String string = "[B@5fd0d5ae";

它只不过是我在上面的代码中生成的byte[]String 表示。

现在我的任务是实际解码值并取回原始文本,即"Test"

为此,我希望byte[]String 表示回到byte[],而不会失去其完整性。

【问题讨论】:

  • 您实际上已经解决了您的问题(我认为)。问题是您以错误的方式打印数组......并且输出让您认为您做错了。
  • 你永远无法从[B@5fd0d5ae 中解码任何内容。您需要比默认的toString() 更有意义的编码。

标签: java arrays base64


【解决方案1】:
System.out.println("decoded raw byte: ");
for (byte singleByte:encodedByteArr) {
    System.out.print((char)singleByte);
}

将字节的字符串表示形式返回到输出。
(效率不高)

【讨论】:

    【解决方案2】:

    现在我的任务是实际解码值并取回原始文本

    听起来您有一个 Base64 编码的字符串,您想解码以生成原始字符串?

    在 Java 8 中,您可以这样做

    import java.util.Base64;
    byte[] decoded = Base64.getDecoder().decode(string);
    String original = new String(decoded);
    

    完整的“往返”如下所示:

    String original = "Hello";
    byte[] encodedBytes = Base64.getEncoder().encode(original.getBytes());
    String encodedString = new String(encodedBytes);
    System.out.println(encodedString);  // "SGVsbG8="
    
    byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
    String decodedString = new String(decodedBytes);
    System.out.println(decodedString);  // "Hello"
    

    【讨论】:

      【解决方案3】:

      所有 Java 数组都是这样打印的。这是他们的工作方式。如果要打印数组的内容,则必须使用来自java.util.Arrays 的静态方法。

      System.out.println("Encoded value is:- "+Arrays.toString(encodedByteArr));
      

      这有点愚蠢,但它就是这样工作的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-04
        • 1970-01-01
        • 2013-02-18
        • 2013-01-17
        • 2015-09-04
        • 1970-01-01
        • 2019-10-03
        • 2016-08-12
        相关资源
        最近更新 更多