Java:将字符串与字节缓冲区相互转换以及相关的问题
2022-08-31 11:09:45
我正在使用Java NIO进行套接字连接,并且我的协议是基于文本的,因此我需要能够在将字符串写入SocketChannel之前将它们转换为ByteBuffers,并将传入的ByteBuffers转换回Strings。目前,我正在使用下面的代码:
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;
}
这在大多数情况下都有效,但我质疑这是否是执行此转换的每个方向的首选(或最简单)方法,或者是否有另一种方法可以尝试。偶尔,而且似乎是随机的,调用和将引发异常或类似情况,即使我每次完成转换时都使用新的ByteBuffer对象。我是否需要同步这些方法?有没有更好的方法在字符串和字节缓冲器之间转换?谢谢!encode()
decode()
java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END