JAXB Marshaller 计算在将对象写入文件之前将对象写入文件需要多少 space
JAXB Marshaller count how much space it takes to write object to file before writing it to a file
我正在
上寻找问题的解决方案
如何计算在将对象写入文件之前将对象写入文件需要多少space
我正在寻找的伪代码是
if (alreadyMarshalled.size() + toBeMarshalled.size() < 40 KB) {
alreadyMarshalled.marshall(toBeMarshalled);
}
所以,我可以使用来自 Apache CountingOutputStream 的计数流,但是
起初我需要知道对象需要多少 space(包括标签),
但是我之前不知道如何在该计数中包含标签和前缀
检查已经编组的内容。有没有图书馆可以
解决这样的情况?
唯一的判断方法是实际编组 XML。
CountingOutputStream 的想法是正确的。
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了,你可以在完成后找出结果数组的大小。但它的内存成本很高。
我正在
上寻找问题的解决方案如何计算在将对象写入文件之前将对象写入文件需要多少space
我正在寻找的伪代码是
if (alreadyMarshalled.size() + toBeMarshalled.size() < 40 KB) {
alreadyMarshalled.marshall(toBeMarshalled);
}
所以,我可以使用来自 Apache CountingOutputStream 的计数流,但是 起初我需要知道对象需要多少 space(包括标签), 但是我之前不知道如何在该计数中包含标签和前缀 检查已经编组的内容。有没有图书馆可以 解决这样的情况?
唯一的判断方法是实际编组 XML。
CountingOutputStream 的想法是正确的。
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了,你可以在完成后找出结果数组的大小。但它的内存成本很高。