X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FImage.java;h=2e9c9f83a39bfd4fcdeef8d351071d8284e9af61;hb=refs%2Fheads%2Fwoops;hp=ace43dedc59d52b596442575ac75fefae2ef99a7;hpb=f04d5e49e91832e122617fbbaa5cdb053459a7e7;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/Image.java b/src/be/nikiroo/utils/Image.java index ace43de..2e9c9f8 100644 --- a/src/be/nikiroo/utils/Image.java +++ b/src/be/nikiroo/utils/Image.java @@ -3,9 +3,10 @@ package be.nikiroo.utils; import java.io.ByteArrayInputStream; import java.io.Closeable; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; import be.nikiroo.utils.streams.MarkableFileInputStream; @@ -14,7 +15,9 @@ import be.nikiroo.utils.streams.MarkableFileInputStream; * * @author niki */ -public class Image implements Closeable { +public class Image implements Closeable, Serializable { + static private final long serialVersionUID = 1L; + static private File tempRoot; static private TempFiles tmpRepository; static private long count = 0; @@ -51,19 +54,6 @@ public class Image implements Closeable { } } - /** - * Create a new {@link Image} from its Base64 representation. - * - * @param base64 - * the {@link Image} in Base64 format - * - * @throws IOException - * in case of I/O error - */ - public Image(String base64) throws IOException { - this(Base64.decode(base64)); - } - /** * Create a new {@link Image} from a stream. * @@ -79,7 +69,8 @@ public class Image implements Closeable { } /** - * Generate an {@link InputStream} for this {@link Image}. + * Generate an {@link InputStream} that you can {@link InputStream#reset()} + * for this {@link Image}. *

* This {@link InputStream} will (always) be a new one, and you are * responsible for it. @@ -93,7 +84,7 @@ public class Image implements Closeable { * in case of I/O error */ public InputStream newInputStream() throws IOException { - return new MarkableFileInputStream(new FileInputStream(data)); + return new MarkableFileInputStream(data); } /** @@ -117,23 +108,6 @@ public class Image implements Closeable { } } - /** - * Convert the given {@link Image} object into a Base64 representation of - * the same {@link Image} object. - *

- * Note: if possible, prefer the {@link Image#newInputStream()} method, as - * it can be more efficient. - * - * @return the Base64 representation - */ - public String toBase64() { - try { - return StringUtils.base64(getData(), false); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - /** * Closing the {@link Image} will delete the associated temporary file on * disk. @@ -184,6 +158,44 @@ public class Image implements Closeable { } } + /** + * Write this {@link Image} for serialization purposes; that is, write the + * content of the backing temporary file. + * + * @param out + * the {@link OutputStream} to write to + * + * @throws IOException + * in case of I/O error + */ + private void writeObject(java.io.ObjectOutputStream out) throws IOException { + InputStream in = newInputStream(); + try { + IOUtils.write(in, out); + } finally { + in.close(); + } + } + + /** + * Read an {@link Image} written by + * {@link Image#writeObject(java.io.ObjectOutputStream)}; that is, create a + * new temporary file with the saved content. + * + * @param in + * the {@link InputStream} to read from + * @throws IOException + * in case of I/O error + * @throws ClassNotFoundException + * will not be thrown by this method + */ + @SuppressWarnings("unused") + private void readObject(java.io.ObjectInputStream in) throws IOException, + ClassNotFoundException { + data = getTemporaryFile(); + IOUtils.write(in, data); + } + /** * Change the temporary root directory used by the program. *