package be.nikiroo.utils;
+import java.io.IOException;
+
/**
* <p>Encodes and decodes to and from Base64 notation.</p>
* <p>Homepage: <a href="http://iharder.net/base64">http://iharder.net/base64</a>.</p>
/** Preferred encoding. */
- private final static String PREFERRED_ENCODING = "US-ASCII";
+ private final static String PREFERRED_ENCODING = "UTF-8";
private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding
} // end catch
//</change>
+ return niki_decode(bytes, 0, bytes.length, options);
+ }
+
+ /**
+ * Decodes data from Base64 notation, automatically
+ * detecting gzip-compressed data and decompressing it.
+ *
+ * @param s the string to decode
+ * @param options encode options such as URL_SAFE
+ * @return the decoded data
+ * @throws java.io.IOException if there is an error
+ * @throws NullPointerException if <tt>s</tt> is null
+ * @since niki
+ */
+ public static byte[] niki_decode( byte[] bytes, int offset, int count, int options ) throws java.io.IOException {
+
// Decode
- bytes = decode( bytes, 0, bytes.length, options );
+ bytes = decode( bytes, offset, count, options );
// Check to see if it's gzip-compressed
// GZIP Magic Two-Byte Number: 0x8b1f (35615)
@Override
public void close() throws java.io.IOException {
// 1. Ensure that pending characters are written
- flushBase64();
+
+ // niki: removed since it is now in flush()
+ //flushBase64();
// 2. Actually close the stream
// Base class both flushes and closes.
this.suspendEncoding = false;
} // end resumeEncoding
-
+ @Override
+ // added by niki
+ public void flush() throws IOException {
+ flushBase64();
+ super.flush();
+ }
} // end inner class OutputStream