面向非行应用层协议的Java服务器程序
我正在用Java编写一个服务器应用程序。要从套接字读取,我有:面向非行应用层协议的Java服务器程序,java,network-programming,Java,Network Programming,我正在用Java编写一个服务器应用程序。要从套接字读取,我有: line = in.readLine(); 其中,中的是一个BufferReader实例,因此我可以从套接字流中读取字符串 如何将其更改为采用非面向行的协议,其中每个应用程序级消息的结尾都由特殊字符终止,例如%,而不是换行字符?在循环中使用该方法,直到字符为%。在每个字符处,将其附加到StringBuilder StringBuilder builder = new StringBuilder(); for (int i = re
line = in.readLine();
其中,中的是一个BufferReader
实例,因此我可以从套接字流中读取字符串
如何将其更改为采用非面向行的协议,其中每个应用程序级消息的结尾都由特殊字符终止,例如%
,而不是换行字符?在循环中使用该方法,直到字符为%
。在每个字符处,将其附加到StringBuilder
StringBuilder builder = new StringBuilder();
for (int i = reader.read(); i >= 0; i = reader.read()) {
char c = (char) i;
if (c == '%') {
break; // or consume the current builder, and recreate a new one
}
else {
builder.append(c);
}
}
在循环中使用该方法,直到字符为%
。在每个字符处,将其附加到StringBuilder
StringBuilder builder = new StringBuilder();
for (int i = reader.read(); i >= 0; i = reader.read()) {
char c = (char) i;
if (c == '%') {
break; // or consume the current builder, and recreate a new one
}
else {
builder.append(c);
}
}
虽然我自己并没有实际使用过这个类,但我确实记得不久前在文档中看到过这个类,它看起来确实可以做您想做的事情,即使它的功能对于分离输入来说可能有点过分了
这将允许您直接将BufferedReader
包装在StreamTokenizer
中,然后您可以将其设置为将%
字符识别为空白字符,将其他字符识别为普通/字母字符。然后,您可以在标记器上重复调用nextToken
,当它返回TT\u WORD
时,您可以通过sval
属性获取标记
然而,根据JB Nizet的回答,最终自己实现可能会更容易 虽然我自己还没有实际使用过这个类,但我确实记得不久前在文档中看到过这个类,它看起来确实可以做您想要的事情,即使它的功能对于仅仅分离输入来说可能有点过分了
这将允许您直接将BufferedReader
包装在StreamTokenizer
中,然后您可以将其设置为将%
字符识别为空白字符,将其他字符识别为普通/字母字符。然后,您可以在标记器上重复调用nextToken
,当它返回TT\u WORD
时,您可以通过sval
属性获取标记
然而,根据JB Nizet的回答,最终自己实现可能会更容易 不,这不是因为BufferedReader将负责缓冲读取。这是使用BufferedReader的主要原因。啊,对不起,我没有注意到他在使用BufferedReader。我以为这是正常的输入流+不,这不是因为BufferedReader将负责缓冲读取。这是使用BufferedReader的主要原因。啊,对不起,我没有注意到他在使用BufferedReader。我以为这是正常的输入流+1那么。