我想知道如何在Java中的缓冲区中正确分隔字符串(使用Apache MINA中的IoBuffers)。这是一些示例代码:
客户端
IoBuffer buffer = IoBuffer.allocate(100);
buffer.putString("username");
buffer.putString("password");
buffer.flip();
session.write(buffer);
因为我在字符串中放入一个接一个的字符串,所以当服务器收到缓冲区时,它将被视为一个字符串。
服务器端
IoBuffer buffer = (IoBuffer) message;
String username = buffer.getString(Charset.forName("UTF-8").newDecoder());
String password = buffer.getString(Charset.forName("UTF-8").newDecoder());
这将在第二个getString()上抛出某种异常,因为程序认为它得到了整个String(因为这两个字符串放在一起算作一个字符串)。
我应该如何正确划分这两个字符串?显而易见的方法是做类似的事情:
“用户名:密码”
并在服务器端:
String[] args = buffer.getString(Charset.forName("UTF-8").newDecoder()).split(":", 2);
String username = args[0];
String password = args[1];
这是最好的方法吗?或者是否有更合适的方法来划分这两个字符串?
非常感谢!
答案 0 :(得分:1)
你有很多方法:通常使用'\n
'是最好的[使用readLine()或nextLine()],'\t
'有时像CSV一样
你也可以使用不在LANG中的特定字符,例如不是ASCII'¨
'中的重音符号,或者像'§
''µ
'这样的符号
你也可以,不可打印的BELL char delim = '7';
答案 1 :(得分:0)
我认为最好的方法是使用分隔符,但可能不是:
,因为它用于搜索路径等。分号;
可能是更好的分隔符,即使它看起来不太好。
这就是我至少在我的应用程序中使用的方法。