繁体   English   中英

在Java中使用AC#base64编码的文件

[英]Consume a c# base64 encoded file in java

我想将文件从C#传输到接受base64字符串的Java Web服务。 问题是,当我使用c#Convert类对文件进行编码时,它会生成一个基于小端无符号字节[]的字符串。

在Java中,byte []是带符号的/大端的。 当我解码传递的字符串时,我得到了另一个byte [],因此文件已损坏。

如何将C#中的byte []编码为base64,它等于在java中使用相同字符串解码的byte []?

C#端:

byte[] attachment = File.ReadAllBytes(@"c:\temp\test.pdf");
String attachmentBase64 = Convert.ToBase64String(attachment, Base64FormattingOptions.None);

Java方面:

  @POST
  @Path("/localpdf")
  @Consumes("text/xml")
  @Produces("text/xml")
  public String getExtractedDataFromEncodedPdf(@FormParam("file") String base64String) {

      if(base64String == null) return null;


      byte[] data = Base64.decodeBase64(base64String.getBytes());

      FileOutputStream ms;
    try {
        ms = new FileOutputStream(new File("C:\\Temp\\test1234.pdf"));
        ms.write(data);
        ms.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

文件test1234.pdf损坏。

“ Signed”和“ big-endian”是非常不同的东西,我相信您会使自己感到困惑。

是的,字节在Java中是带符号的,而在C#中是无符号的-但我强烈怀疑在两种情况下您都得到了相同的实际位...只是(例如)11111111的位模式在C#中表示255,而在Java中表示-1 。 除非您将字节视为数字 (这很少有用),否则没有关系-如果仅使用字节在Java端写出文件,那当然也没有关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM