java 中的字符串到字节数组

String to byte array in java

我有一个 base64 编码的字符串。我通过将 pdf 文件转换为 GZ 格式然后根据要求转换为 Base64 获得了这个字符串。我想将它发送到服务器,但我生成的 类 使用的是 Axis2,并且只接受特定 soap 请求的字节数组。

当我使用时:

base64Str.getBytes()

它再次以 UTF-8(默认)编码我的字符串并更改我要发送的字符串字符。这就是我收到此错误的原因:服务器端文件已损坏。当我使用 SOAP UI 工具发送我的 base64 字符串时它可以工作,所以我想将我的 base64 字符串转换为字节数组而不更改其字符或其他替代方法来完成此任务。

**Base64 String**: H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3......

**Above string.getBytes()** => EPR3cn7l/pMgVTTS0sz1XzDAAkIgAQjoHkhY....

这对你有帮助吗

导入org.apache.commons.codec.binary.Base64;

public class MyTest {
    public static void main(String[] args) {
        String example = "H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3";
        Base64 base64 = new Base64();
        byte[] decoded = Base64.decodeBase64(example);

    }
}

你可以使用DatatypeConverter的parseBase64Binary,如下:

String encoded = "H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3......";
byte[] bytes = DatatypeConverter.parseBase64Binary(encoded);

可能有更好的方法来处理 Base64 编码,正如此处已经解释的那样,但要直接解决您的问题:

    String s = "H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3";
    System.out.println(s);
    byte[] bytes = s.getBytes();
    System.out.println(new String(bytes));

如果您像这样在目的地重新创建字符串,您确实会收到发送的内容。

完全绕过 String class。无论您使用什么代码转换为 Base64,都请将数据直接放入 byte[]

如果您使用 Java 8,请使用 java.util.Base64.Encoder 为您完成。