X-Git-Url: https://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FCustomSerializer.java;h=80bac595a8a13068b1b45b10ece585c1566d5bb9;hb=ecd81c088d8df94c47c85399afdab87bbd39afaf;hp=be89316eae07b74f6a67ccaeb589641ba81f8cea;hpb=f4053377fa15da2f11e82955bfab86e673fa371c;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/serial/CustomSerializer.java b/src/be/nikiroo/utils/serial/CustomSerializer.java index be89316..80bac59 100644 --- a/src/be/nikiroo/utils/serial/CustomSerializer.java +++ b/src/be/nikiroo/utils/serial/CustomSerializer.java @@ -1,34 +1,43 @@ package be.nikiroo.utils.serial; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; public abstract class CustomSerializer { - protected abstract String toString(Object value); + protected abstract void toStream(OutputStream out, Object value) + throws IOException; - protected abstract Object fromString(String content) throws IOException; + protected abstract Object fromStream(InputStream in) throws IOException; protected abstract String getType(); /** - * Encode the object into the given builder if possible (if supported). + * Encode the object into the given {@link OutputStream} if supported. * - * @param builder + * @param out * the builder to append to * @param value * the object to encode - * @return TRUE if success, FALSE if not (the content of the builder won't - * be changed in case of failure) + * + * @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(StringBuilder builder, Object value) { - int prev = builder.length(); - String customString = toString(value); - builder.append("custom^").append(getType()).append("^"); - if (!SerialUtils.encode(builder, customString)) { - builder.delete(prev, builder.length()); + public boolean encode(OutputStream out, Object value) throws IOException { + if (!isSupported(value)) { return false; } + SerialUtils.write(out, "custom^"); + SerialUtils.write(out, getType()); + SerialUtils.write(out, "^"); + toStream(out, value); + return true; }