[ 
http://issues.apache.org/jira/browse/DIRMINA-242?page=comments#action_12432555 
] 
            
Trustin Lee commented on DIRMINA-242:
-------------------------------------

Ah I see.  The problem you are describing is fixed in 0.9.  OK, now let's talk 
about stopOnZero.

If your intention is to read data beyond NUL, is the data a string?  Isn't it a 
byte array?  Is there any reason that you want to get it as a string?

> ByteBuffer.getString(ByteBuffer buf, int fieldSize, CharsetDecoder decoder, 
> boolean stopOnZero )
> ------------------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-242
>                 URL: http://issues.apache.org/jira/browse/DIRMINA-242
>             Project: Directory MINA
>          Issue Type: New Feature
>    Affects Versions: 0.8.2
>            Reporter: Pavel Zdenek
>            Priority: Trivial
>
> The method would read an ASCIIZ string off the buffer as the existing method 
> without added parameter.
> If stopOnZero is false, it would continue blindly reading the stream up to 
> the required fieldSize.
> So far MINA has no support for reading fixed (small) size strings. This is 
> common for protocols constructed at devices with limited resources (i.e. 
> network attached microcontrollers) and above the mandatory ending zero may be 
> whatever garbage left from previous memory usage.
> My temporary implementation follows, to get the idea.
> It also solves the problem with getString behavior when reading ASCIIZ at the 
> end of buffer (apparently fixed in dev 0.9) 
>     public static String getString(ByteBuffer buf, int fieldSize, 
> CharsetDecoder decoder, boolean stopOnZero )
>     throws CharacterCodingException
>     {
>       if( fieldSize == 0) fieldSize = buf.remaining(); // convenience "0 ~ 
> till the end"
>       int origLimit = buf.limit();
>       int posStrEnd = 0;
>       buf.mark(); // beginning of string
>       boolean foundZero = false;
>         while(buf.hasRemaining() && (fieldSize-- > 0) )
>         {
>             if( (buf.get() == 0) && !foundZero ) 
>             {
>               foundZero = true;
>               posStrEnd = buf.position()-1;
>               if( stopOnZero ) break;
>             }
>         }
>       int reachedPos = buf.position(); // later must return here
>       buf.reset(); // position to string begin
>         if(foundZero) buf.limit( posStrEnd ); 
>       String str = buf.getString(decoder);
>       if(foundZero) buf.limit(origLimit);
>       buf.position(reachedPos);
>       return str;
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to