[ https://issues.apache.org/jira/browse/DIRMINA-242?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Lecharny closed DIRMINA-242. ------------------------------------- > ByteBuffer.getString(ByteBuffer buf, int fieldSize, CharsetDecoder decoder, > boolean stopOnZero ) > ------------------------------------------------------------------------------------------------ > > Key: DIRMINA-242 > URL: https://issues.apache.org/jira/browse/DIRMINA-242 > Project: MINA > Issue Type: New Feature > Affects Versions: 0.8.2 > Reporter: Pavel Zdenek > Assignee: Trustin Lee > 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. - You can reply to this email to add a comment to the issue online.