Java: Convertendo String para e de ByteBuffer e problemas associados

Eu estou usando o Java NIO para minhas conexões de soquete, e meu protocolo é baseado em texto, então eu preciso ser capaz de converter Strings para ByteBuffers antes de gravá-los para o SocketChannel e converter ByteBuffers de entrada de volta para Strings. Atualmente, estou usando este código:

public static Charset charset = Charset.forName("UTF-8");
public static CharsetEncoder encoder = charset.newEncoder();
public static CharsetDecoder decoder = charset.newDecoder();

public static ByteBuffer str_to_bb(String msg){
  try{
    return encoder.encode(CharBuffer.wrap(msg));
  }catch(Exception e){e.printStackTrace();}
  return null;
}

public static String bb_to_str(ByteBuffer buffer){
  String data = "";
  try{
    int old_position = buffer.position();
    data = decoder.decode(buffer).toString();
    // reset buffer's position to its original so it is not altered:
    buffer.position(old_position);  
  }catch (Exception e){
    e.printStackTrace();
    return "";
  }
  return data;
}

Isso funciona na maioria das vezes, mas eu questiono se essa é a maneira preferida (ou mais simples) de fazer cada direção dessa conversão ou se há outra maneira de tentar. Ocasionalmente, e aparentemente aleatoriamente, chamadas paraencode() edecode() vai jogar umjava.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END exceção, ou similar, mesmo se eu estiver usando um novo objeto ByteBuffer cada vez que uma conversão é feita. Preciso sincronizar esses métodos? Qualquer maneira melhor de converter entre Strings e ByteBuffers? Obrigado!

questionAnswers(3)

yourAnswerToTheQuestion