You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2006/03/11 17:15:06 UTC
svn commit: r385102 -
/directory/trunks/mina/core/src/main/java/org/apache/mina/common/ByteBuffer.java
Author: trustin
Date: Sat Mar 11 08:15:05 2006
New Revision: 385102
URL: http://svn.apache.org/viewcvs?rev=385102&view=rev
Log:
* Optimized ByteBuffer.putString() more
* Modified Peter's patch a little bit to make sure the state is reset
Modified:
directory/trunks/mina/core/src/main/java/org/apache/mina/common/ByteBuffer.java
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/common/ByteBuffer.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/common/ByteBuffer.java?rev=385102&r1=385101&r2=385102&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/common/ByteBuffer.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/common/ByteBuffer.java Sat Mar 11 08:15:05 2006
@@ -1086,10 +1086,10 @@
}
CharBuffer in = CharBuffer.wrap( val );
- int expectedLength = (int) (in.remaining() * encoder.averageBytesPerChar()) + 1;
-
encoder.reset();
+ int expandedState = 0;
+
for (;;) {
CoderResult cr;
if( in.hasRemaining() )
@@ -1105,10 +1105,31 @@
{
break;
}
- if( cr.isOverflow() && isAutoExpand() )
+ if( cr.isOverflow() )
+ {
+ if( isAutoExpand() )
+ {
+ switch( expandedState )
+ {
+ case 0:
+ autoExpand( ( int ) Math.ceil( in.remaining() * encoder.averageBytesPerChar() ) );
+ expandedState ++;
+ break;
+ case 1:
+ autoExpand( ( int ) Math.ceil( in.remaining() * encoder.maxBytesPerChar() ) );
+ expandedState ++;
+ break;
+ default:
+ throw new RuntimeException( "Expanded by " +
+ ( int ) Math.ceil( in.remaining() * encoder.maxBytesPerChar() ) +
+ " but that wasn't enough for '" + val + "'");
+ }
+ continue;
+ }
+ }
+ else
{
- autoExpand( limit() - position() + expectedLength );
- continue;
+ expandedState = 0;
}
cr.throwException();
}