package be.nikiroo.utils.serial;
+import java.io.IOException;
import java.io.NotSerializableException;
+import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
-import be.nikiroo.utils.StringUtils;
-
/**
* A simple class to serialise objects to {@link String}.
* <p>
*/
public class Exporter {
private Map<Integer, Object> map;
- private StringBuilder builder;
-
- public Exporter() {
- map = new HashMap<Integer, Object>();
- builder = new StringBuilder();
- }
-
- public Exporter append(Object o) throws NotSerializableException {
- SerialUtils.append(builder, o, map);
- return this;
- }
-
- public void clear() {
- builder.setLength(0);
- map.clear();
- }
+ private OutputStream out;
- // null = auto
- public String toString(Boolean zip) {
- if (zip == null) {
- zip = builder.length() > 128;
+ /**
+ * Create a new {@link Exporter}.
+ *
+ * @param out
+ * export the data to this stream
+ */
+ public Exporter(OutputStream out) {
+ if (out == null) {
+ throw new NullPointerException(
+ "Cannot create an be.nikiroo.utils.serials.Exporter that will export to NULL");
}
- if (zip) {
- return "ZIP:" + StringUtils.zip64(builder.toString());
- } else {
- return builder.toString();
- }
+ this.out = out;
+ map = new HashMap<Integer, Object>();
}
/**
- * The exported items in a serialised form.
+ * Serialise the given object and add it to the list.
+ * <p>
+ * <b>Important: </b>If the operation fails (with a
+ * {@link NotSerializableException}), the {@link Exporter} will be corrupted
+ * (will contain bad, most probably not importable data).
*
- * @return the items currently in this {@link Exporter}.
+ * @param o
+ * the object to serialise
+ * @return this (for easier appending of multiple values)
+ *
+ * @throws NotSerializableException
+ * if the object cannot be serialised (in this case, the
+ * {@link Exporter} can contain bad, most probably not
+ * importable data)
+ * @throws IOException
+ * in case of I/O error
*/
- @Override
- public String toString() {
- return toString(null);
+ public Exporter append(Object o) throws NotSerializableException,
+ IOException {
+ SerialUtils.append(out, o, map);
+ return this;
}
}
\ No newline at end of file