Java: преобразование строки в / из ByteBuffer и связанные с этим проблемы

Я использую Java NIO для своих соединений с сокетами, и мой протокол основан на тексте, поэтому мне нужно иметь возможность преобразовывать строки в ByteBuffers перед записью их в SocketChannel и преобразовывать входящие ByteBuffers обратно в строки. В настоящее время я использую этот код:

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

Это работает большую часть времени, но я задаюсь вопросом, является ли это предпочтительным (или самым простым) способом сделать каждое направление этого преобразования, или есть ли другой способ попробовать. Время от времени и, казалось бы, наугадencode() а такжеdecode() броситjava.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END исключение или подобное, даже если я использую новый объект ByteBuffer каждый раз, когда выполняется преобразование. Нужно ли синхронизировать эти методы? Есть ли лучший способ конвертировать между Strings и ByteBuffers? Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос