[英]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.