Merge commit '77d3a60869e7a780c6ae069e51530e1eacece5e2'
[fanfix.git] / src / be / nikiroo / utils / serial / Exporter.java
index 8b522e9556054dea43572f6a5e4226f738e116b8..2470bde4dace9f6dd0ca73f61373991a4cbd4283 100644 (file)
@@ -1,11 +1,11 @@
 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>
@@ -16,43 +16,45 @@ import be.nikiroo.utils.StringUtils;
  */
 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;
-               }
-
-               if (zip) {
-                       return "ZIP:" + StringUtils.zip64(builder.toString());
+       /**
+        * 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");
                }
 
-               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