[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