Java: Konwersja ciągów znaków do i z ByteBuffera oraz powiązane problemy

Używam Java NIO dla moich połączeń z gniazdami, a mój protokół jest oparty na tekście, więc muszę być w stanie konwertować ciągi znaków na ByteBuffers przed zapisaniem ich w SocketChannel i konwertować przychodzące ByteBuffers z powrotem na ciągi. Obecnie używam tego kodu:

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;
}

Działa to przez większość czasu, ale zastanawiam się, czy jest to preferowany (lub najprostszy) sposób na wykonanie każdego kierunku tej konwersji, czy też istnieje inny sposób. Czasami i pozornie losowo, połączenia doencode() idecode() rzucijava.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END wyjątek lub podobny, nawet jeśli używam nowego obiektu ByteBuffer przy każdej konwersji. Czy muszę synchronizować te metody? Jakikolwiek lepszy sposób na konwersję między ciągami znaków i bajtami bajtowymi? Dzięki!

questionAnswers(3)

yourAnswerToTheQuestion