Java JAXB Marshaller在将对象写入文件之前计算将对象写入文件所需的空间
我正在寻找一个解决问题的方法 在将对象写入文件之前,如何计算将对象写入文件所需的空间 我正在寻找的伪代码是Java JAXB Marshaller在将对象写入文件之前计算将对象写入文件所需的空间,java,jaxb,Java,Jaxb,我正在寻找一个解决问题的方法 在将对象写入文件之前,如何计算将对象写入文件所需的空间 我正在寻找的伪代码是 if (alreadyMarshalled.size() + toBeMarshalled.size() < 40 KB) { alreadyMarshalled.marshall(toBeMarshalled); } 因此,我可以使用来自的计数流,即Apache CountingOutputStream,但是 首先,我需要知道对象将包含多少空间, 然而,我以前不知道如何在
if (alreadyMarshalled.size() + toBeMarshalled.size() < 40 KB) {
alreadyMarshalled.marshall(toBeMarshalled);
}
因此,我可以使用来自的计数流,即Apache CountingOutputStream,但是
首先,我需要知道对象将包含多少空间,
然而,我以前不知道如何在计数中包含标记和前缀
正在检查已编组的内容。有没有图书馆可以
解决这种情况?唯一的方法是实际封送XML 倒计时输出流的想法是正确的
NullOutputStream nos = new NullOutputStream();
CountingOutputStream cos = new CountingOutputStream(nos);
OutputStreamWriter osw = new OutputStreamWriter(cos);
jaxbMarshaller.marshal(object, osw);
long result = cos.getByteCount();
你必须运行两次,一次获得计数,再次写出它,这是唯一确定的方法,而且这不会花费你任何实际内存
如果您不担心内存,那么只需将其转储到ByteArrayOutputStream,如果您决定保留它,则可以直接将字节数组转储到文件中,而无需再次运行封送处理程序
事实上,使用ByteArrayOutputStream,您不需要CountingOutputStream,只需在完成后找出结果数组的大小即可。但它可能需要很高的内存成本