java中字符串到字节数组

时间:2015-01-27 09:49:54

标签: java soap encoding base64 gzip

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

当我使用时:

base64Str.getBytes()

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

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

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

4 个答案:

答案 0 :(得分:0)

这有助于你

import 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);

    }
}

答案 1 :(得分:0)

您可以使用DatatypeConverter的parseBase64Binary,如下所示:

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

答案 2 :(得分:0)

可能有更好的方法来处理Base64编码,如此处所述,但直接解决您的问题:

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

如果你像这样在目的地重新创建字符串,你就会得到你发送的内容。

答案 3 :(得分:0)

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

如果您使用的是Java 8,请使用java.util.Base64.Encoder为您执行此操作。