summaryrefslogtreecommitdiff
path: root/libjava/gnu/gcj/convert/UnicodeToBytes.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/gcj/convert/UnicodeToBytes.java')
-rw-r--r--libjava/gnu/gcj/convert/UnicodeToBytes.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/convert/UnicodeToBytes.java b/libjava/gnu/gcj/convert/UnicodeToBytes.java
new file mode 100644
index 00000000000..4b772f96eda
--- /dev/null
+++ b/libjava/gnu/gcj/convert/UnicodeToBytes.java
@@ -0,0 +1,90 @@
+/* Copyright (C) 1999 Cygnus Solutions
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package gnu.gcj.convert;
+
+public abstract class UnicodeToBytes
+{
+ /** Buffer to emit bytes to.
+ * The locations buf[count] ... buf[buf.length-1] are available. */
+ public byte[] buf;
+ public int count;
+
+ static Class defaultEncodingClass;
+
+ static synchronized void getDefaultEncodingClass()
+ {
+ // Test (defaultEncodingClass == null) again in case of race condition.
+ if (defaultEncodingClass == null)
+ {
+ String encoding = System.getProperty("file.encoding");
+ String className = "gnu.gcj.convert.Output_"+encoding;
+ try
+ {
+ defaultEncodingClass = Class.forName(className);
+ }
+ catch (ClassNotFoundException ex)
+ {
+ throw new NoClassDefFoundError("missing default encoding "
+ + encoding + " (class "
+ + className + " not found)");
+
+ }
+ }
+ }
+
+ public abstract String getName();
+
+ public static UnicodeToBytes getDefaultEncoder()
+ {
+ try
+ {
+ if (defaultEncodingClass == null)
+ getDefaultEncodingClass();
+ return (UnicodeToBytes) defaultEncodingClass.newInstance();
+ }
+ catch (Throwable ex)
+ {
+ return new Output_8859_1();
+ }
+ }
+
+ /** Get a char-stream->byte-stream converter given an encoding name. */
+ public static UnicodeToBytes getEncoder (String encoding)
+ throws java.io.UnsupportedEncodingException
+ {
+ String className = "gnu.gcj.convert.Output_"+encoding;
+ Class encodingClass;
+ try
+ {
+ encodingClass = Class.forName(className);
+ return (UnicodeToBytes) encodingClass.newInstance();
+ }
+ catch (Throwable ex)
+ {
+ throw new java.io.UnsupportedEncodingException(encoding + " ("
+ + ex + ')');
+ }
+ }
+
+ public final void setOutput(byte[] buffer, int count)
+ {
+ this.buf = buffer;
+ this.count = count;
+ }
+
+ /** Convert chars to bytes.
+ * Converted bytes are written to buf, starting at count.
+ * @param inbuffer sources of characters to convert
+ * @param inpos index of initial character ininbuffer to convert
+ * @param inlength number of characters to convert
+ * @return number of chars converted
+ * Also, this.count is increment by the number of bytes converted.
+ */
+ public abstract int write (char[] inbuffer, int inpos, int inlength);
+}