java Un/将base64编码的二进制数据编组为流
我有一个应用程序,使用JAXB从Oracle数据库向XML导入和导出数据。现在数据库中有一些BLOB字段,其中包含上传的文件,我希望这些文件在XML中以base64编码字符串的形式存在。这在使用@XmlSchemaType(name = "base64Binary")
的JAXB中非常适合,如下所示:
@XmlType
public class DocumentTemplateFile {
// other fields ommited
@XmlElement(required = true)
@XmlSchemaType(name = "base64Binary")
private byte[] data;
// other code ommited
}
此解决方案的问题是,由于字节数组,整个文件内容都存储在内存中。根据文件的大小,这可能会导致一些问题
因此,我想知道是否有一种方法可以创建一个XmlAdapter
或类似的文件,从文件中获取流,这样我就可以直接从数据库的BLOB中获取流,而不必将整个内容存储在内存中。我在想类似的事情:
public class BlobXmlAdapter extends XmlAdapter<InputStream, OutputStream> {
@Override
public InputStream marshal(final OutputStream value) throws Exception {
return null;
}
@Override
public OutputStream unmarshal(final InputStream value) throws Exception {
return null;
}
}
这显然只是一个说明性的例子,这样你就可以知道我在找什么。最终的解决方案不一定要使用XmlAdater
。我所需要的只是一种方法来钩住取消/编组过程,并通过缓冲区/队列流式传输数据,而不是将所有内容存储在字节数组中
# 1 楼答案
创建自定义
XmlAdapter
,如下所示:现在在你的bean中,使用它:
现在,整个二进制内容存储在文件中。您可以读取/写入此文件。这个文件在jvm退出时被删除
# 2 楼答案
此解决方案使用以下第三方库。您应该使用以下maven依赖项:
我们需要使用以下自定义
XmlAdapter
:现在将pojo更改为使用上述适配器:
现在,应该使用以下帮助器类来读取xml文件:
现在读取xml文件,如下所示: