X-Git-Url: http://git.nikiroo.be/?p=nikiroo-utils.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FCustomSerializer.java;fp=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FCustomSerializer.java;h=3ac47a89eb2df4957ebebd8309c95c02de01add8;hp=36a6c214c02576deb012316e2d6338477554d6e5;hb=3b4319db57971bce3afd9092a0f9db9809d47ca2;hpb=67b76a57e0789b4c2afb0091b9d5bcd120290ed1 diff --git a/src/be/nikiroo/utils/serial/CustomSerializer.java b/src/be/nikiroo/utils/serial/CustomSerializer.java index 36a6c21..3ac47a8 100644 --- a/src/be/nikiroo/utils/serial/CustomSerializer.java +++ b/src/be/nikiroo/utils/serial/CustomSerializer.java @@ -7,6 +7,8 @@ import java.io.OutputStream; import be.nikiroo.utils.IOUtils; import be.nikiroo.utils.streams.NextableInputStream; import be.nikiroo.utils.streams.NextableInputStreamStep; +import be.nikiroo.utils.streams.ReplaceInputStream; +import be.nikiroo.utils.streams.ReplaceOutputStream; public abstract class CustomSerializer { @@ -25,60 +27,67 @@ public abstract class CustomSerializer { * @param value * the object to encode * - * @return FALSE if the value is not supported, TRUE if the operation was - * successful (if the value is supported by the operation was not - * successful, you will get an {@link IOException}) - * * @throws IOException * in case of I/O error */ - public boolean encode(OutputStream out, Object value) throws IOException { - SerialUtils.write(out, "custom^"); - SerialUtils.write(out, getType()); - SerialUtils.write(out, "^"); - // TODO: manage ENTER - toStream(out, value); - - return true; + public void encode(OutputStream out, Object value) throws IOException { + ReplaceOutputStream replace = new ReplaceOutputStream(out, // + new String[] { "\\", "\n" }, // + new String[] { "\\\\", "\\n" }); + try { + SerialUtils.write(replace, "custom^"); + SerialUtils.write(replace, getType()); + SerialUtils.write(replace, "^"); + toStream(replace, value); + } finally { + replace.close(false); + } } public Object decode(InputStream in) throws IOException { - // TODO: manage ENTER - NextableInputStream stream = new NextableInputStream(in, - new NextableInputStreamStep('^')); + ReplaceInputStream replace = new ReplaceInputStream(in, // + new String[] { "\\\\", "\\n" }, // + new String[] { "\\", "\n" }); try { - if (!stream.next()) { - throw new IOException("Cannot find the first custom^ element"); + NextableInputStream stream = new NextableInputStream( + replace.open(), new NextableInputStreamStep('^')); + try { + if (!stream.next()) { + throw new IOException( + "Cannot find the first custom^ element"); + } + + String custom = IOUtils.readSmallStream(stream); + if (!"custom".equals(custom)) { + throw new IOException( + "Cannot find the first custom^ element, it is: " + + custom + "^"); + } + + if (!stream.next()) { + throw new IOException("Cannot find the second custom^" + + getType() + " element"); + } + + String type = IOUtils.readSmallStream(stream); + if (!getType().equals(type)) { + throw new IOException("Cannot find the second custom^" + + getType() + " element, it is: custom^" + type + + "^"); + } + + if (!stream.nextAll()) { + throw new IOException("Cannot find the third custom^" + + getType() + "^value element"); + } + + return fromStream(stream); + } finally { + stream.close(); } - - String custom = IOUtils.readSmallStream(stream); - if (!"custom".equals(custom)) { - throw new IOException( - "Cannot find the first custom^ element, it is: " - + custom + "^"); - } - - if (!stream.next()) { - throw new IOException("Cannot find the second custom^" - + getType() + " element"); - } - - String type = IOUtils.readSmallStream(stream); - if (!getType().equals(type)) { - throw new IOException("Cannot find the second custom^" - + getType() + " element, it is: custom^" + type + "^"); - } - - if (!stream.nextAll()) { - throw new IOException("Cannot find the third custom^" - + getType() + "^value element"); - } - - // TODO: manage ENTER - return fromStream(stream); } finally { - stream.close(false); + replace.close(false); } }