소켓 연결에 Java NIO를 사용하고 있으며 프로토콜은 텍스트 기반이므로 SocketChannel에 쓰기 전에 문자열을 ByteBuffer로 변환하고 들어오는 ByteBuffer를 다시 문자열로 변환 할 수 있어야합니다. 현재 다음 코드를 사용하고 있습니다.
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 객체에게 변환이 수행 될 때마다 사용하고 경우에도 예외 또는 유사한. 이러한 방법을 동기화해야합니까? 문자열과 ByteBuffer 사이를 변환하는 더 좋은 방법이 있습니까? 감사!