Jörg Schaible
2014-09-26 07:27:17 UTC
Hi Martin,
sorry for the long delay. However, you should use the user's list for
questions.
streams (XSTR-532). However, although outside of the XStream specification,
it should be possible to call setValue multiple times for stream-based XML
drivers. Therefore you could use a Base64 stream (e.g. from Apache commons-
codec) to write chunks into a buffer and write that one with setValue before
continuing with the next chunk.
- Jörg
sorry for the long delay. However, you should use the user's list for
questions.
Hi,
I have to export lots of objects from a database into a XML file. These
objects contain large BLOBs, so I started to implement a "BlobConverter".
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
Blob blob = (Blob) source;
context.convertAnother(blob.getBytes(1, (int) blob.length()));
This would read the whole BLOB into a byte array and delegate to
EncodedByteArrayConverter, which in turn would write a base64 encoded
string. This creates two arrays in the heap (the byte array and the char
array with the base64 encoded data), which are way too large to fit into
the available heap space.
So I am looking for a solution which would allow to stream the binary data
into a streaming base64 encoder and to stream that into the output stream.
However, I could not find any method in HierarchicalStreamWriter which
would allow to stream character data. There is just "void setValue(String
text)", which requires the whole data to be in the heap.
Is it possible to stream character data to the output stream?
XStream has no direct support writing or reading an element's text withI have to export lots of objects from a database into a XML file. These
objects contain large BLOBs, so I started to implement a "BlobConverter".
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
Blob blob = (Blob) source;
context.convertAnother(blob.getBytes(1, (int) blob.length()));
This would read the whole BLOB into a byte array and delegate to
EncodedByteArrayConverter, which in turn would write a base64 encoded
string. This creates two arrays in the heap (the byte array and the char
array with the base64 encoded data), which are way too large to fit into
the available heap space.
So I am looking for a solution which would allow to stream the binary data
into a streaming base64 encoder and to stream that into the output stream.
However, I could not find any method in HierarchicalStreamWriter which
would allow to stream character data. There is just "void setValue(String
text)", which requires the whole data to be in the heap.
Is it possible to stream character data to the output stream?
streams (XSTR-532). However, although outside of the XStream specification,
it should be possible to call setValue multiple times for stream-based XML
drivers. Therefore you could use a Base64 stream (e.g. from Apache commons-
codec) to write chunks into a buffer and write that one with setValue before
continuing with the next chunk.
- Jörg