gpt4 book ai didi

java - 在java中使用c# base64编码的文件

转载 作者:行者123 更新时间:2023-12-01 11:20:20 27 4
gpt4 key购买 nike

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

在 Java 中,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 和 - 1 在 java 。除非您将字节视为数字(这很少有用),否则这并不重要 - 如果您只是使用字节在 Java 端写出文件,那当然并不重要。

关于java - 在java中使用c# base64编码的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com