[jboss-svn-commits] JBoss Common SVN: r3980 - jboss-stdio/trunk/src/main/java/org/jboss/stdio.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 4 18:46:31 EST 2010


Author: david.lloyd at jboss.com
Date: 2010-02-04 18:46:31 -0500 (Thu, 04 Feb 2010)
New Revision: 3980

Modified:
   jboss-stdio/trunk/src/main/java/org/jboss/stdio/AbstractLoggingWriter.java
   jboss-stdio/trunk/src/main/java/org/jboss/stdio/WriterOutputStream.java
Log:
Straighten out the goofy flush behavior

Modified: jboss-stdio/trunk/src/main/java/org/jboss/stdio/AbstractLoggingWriter.java
===================================================================
--- jboss-stdio/trunk/src/main/java/org/jboss/stdio/AbstractLoggingWriter.java	2010-02-04 23:09:51 UTC (rev 3979)
+++ jboss-stdio/trunk/src/main/java/org/jboss/stdio/AbstractLoggingWriter.java	2010-02-04 23:46:31 UTC (rev 3980)
@@ -79,17 +79,7 @@
 
     /** {@inheritDoc} */
     public void flush() throws IOException {
-        final java.util.logging.Logger logger = getLogger();
-        if (logger == null) {
-            return;
-        }
-        synchronized (buffer) {
-            if (buffer.length() > 0) {
-                buffer.append(" >>> FLUSH");
-                logger.log(getLevel(), buffer.toString());
-                buffer.setLength(0);
-            }
-        }
+        // ignore
     }
 
     /**

Modified: jboss-stdio/trunk/src/main/java/org/jboss/stdio/WriterOutputStream.java
===================================================================
--- jboss-stdio/trunk/src/main/java/org/jboss/stdio/WriterOutputStream.java	2010-02-04 23:09:51 UTC (rev 3979)
+++ jboss-stdio/trunk/src/main/java/org/jboss/stdio/WriterOutputStream.java	2010-02-04 23:46:31 UTC (rev 3980)
@@ -30,6 +30,7 @@
 import java.nio.charset.CoderResult;
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
+import java.nio.charset.CodingErrorAction;
 
 /**
  * An output stream which decodes into a writer.
@@ -79,6 +80,9 @@
     public WriterOutputStream(final Writer writer, final CharsetDecoder decoder) {
         this.writer = writer;
         this.decoder = decoder;
+        decoder.onMalformedInput(CodingErrorAction.REPLACE);
+        decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+        decoder.replaceWith("?");
         inputBuffer = ByteBuffer.allocate(256);
         outputBuffer = CharBuffer.allocate(256);
     }
@@ -89,7 +93,7 @@
             final ByteBuffer inputBuffer = this.inputBuffer;
             inputBuffer.put((byte) b);
             if (! inputBuffer.hasRemaining()) {
-                flush();
+                finish();
             }
         }
     }
@@ -107,21 +111,23 @@
                 if (len == 0) {
                     return;
                 }
-                flush();
+                finish();
             }
         }
     }
 
-    /** {@inheritDoc} */
-    public void flush() throws IOException {
-        synchronized (decoder) {
-            final CharBuffer outputBuffer = this.outputBuffer;
-            final ByteBuffer inputBuffer = this.inputBuffer;
-            inputBuffer.flip();
-            for (;;) {
+    private void finish() throws IOException {
+        final CharBuffer outputBuffer = this.outputBuffer;
+        final ByteBuffer inputBuffer = this.inputBuffer;
+        inputBuffer.flip();
+        try {
+            while (inputBuffer.hasRemaining()) {
                 final CoderResult coderResult = decoder.decode(inputBuffer, outputBuffer, false);
-                if (coderResult.isOverflow()) {
-                    outputBuffer.flip();
+                if (coderResult.isUnderflow() && outputBuffer.position() == 0) {
+                    return;
+                }
+                outputBuffer.flip();
+                try {
                     boolean ok = false;
                     try {
                         writer.write(outputBuffer.array(), outputBuffer.arrayOffset(), outputBuffer.remaining());
@@ -130,17 +136,23 @@
                         if (! ok) {
                             inputBuffer.clear();
                         }
-                        outputBuffer.clear();
                     }
-                } else if (coderResult.isUnderflow()) {
-                    inputBuffer.compact();
-                    writer.flush();
-                    return;
+                } finally {
+                    outputBuffer.clear();
                 }
             }
+        } finally {
+            inputBuffer.compact();
         }
     }
 
+    public void flush() throws IOException {
+        synchronized (decoder) {
+            finish();
+            writer.flush();
+        }
+    }
+
     /** {@inheritDoc} */
     public void close() throws IOException {
         flush();



More information about the jboss-svn-commits mailing list