Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB Marshaller在将对象写入文件之前计算将对象写入文件所需的空间_Java_Jaxb - Fatal编程技术网

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,只需在完成后找出结果数组的大小即可。但它可能需要很高的内存成本