我需要将一个Base64二进制元素附加到SOAP消息中......我正在进行干运行以检查是否可以将从文件读取的值转换为Base64二进制文件..
以下是代码..在最后一行我尝试打印编码1的类型(我假设它应该是Base64二进制值)但我得到以下显示..."附件[B&#34 ; ...如何确认其Base64二进制字符串?
Path path = Paths.get("c:/tomcatupload/text.csv");
byte[] attachment1 = Files.readAllBytes(path);
byte[] encoded1 = Base64.encode(attachment1);
System.out.println("Attachment"+ encoded1.getClass().getName());
答案 0 :(得分:2)
当且仅当 编码1 > 获得的附件1的大小时,Base64.encode()的编码才成功。
请参阅,了解编码的工作原理。
http://en.wikipedia.org/wiki/Base64
顺便说一句,你的上一个语句不会打印数组内容。它打印encode1所属的类的名称。
答案 1 :(得分:2)
Base-64 encoding是一种将任意字节转换为适合ASCII编码的文本字符范围内的字节的方法。这是在没有任何解释的情况下完成的 - 原始字节在发送者端被转换为base-64;接收器将它们转换回一个字节流,而这就是它的全部内容。
当您的代码打印encoded1.getClass().getName()
时,它获取的只是字节数组的静态类型。为了将base-64中编码的数据解释为对程序有意义的内容,您需要知道作为base-64传输的基础数据的格式。一旦字节传递给你(在你的情况下,那个encoded1
字节数组)你需要决定里面的内容,并采取相应的行动。
例如,如果序列化的Java对象作为base-64发送给您,则需要使用encoded1
,从中创建内存流,并使用常规序列化机制读取对象:< / p>
ByteArrayInputStream memStream = new ByteArrayInputStream(encoded1);
ObjectInputStream objStream = new ObjectInputStream(memStream);
Object attachedObject = objStream.readObject();