我正在编写客户端/服务器应用程序。我有一个带有几个String字段的Message类。我编写了以下方法来返回这些字段的char []:
public char[] toArrayOfChar()
{
String str = "";
char[] charr;
str += from;
str += "\r\n";
str += to;
str += "\r\n";
str += header;
str += "\r\n";
str += body;
str += "\r\n";
str += header;
str += "\r\n";
charr = str.toCharArray();
return charr;
}
现在,我希望将每个字段分开,并在将其从客户端发送到服务器后将其转换为字符串。如何识别每个字段末尾的回车符和换行符?
答案 0 :(得分:2)
我建议您按official trail: Reading from and Writing to Sockets中的建议调查PrintWriter
和BufferedReader
类。
使用这些类,您只需使用
发送字符串即可out.println(from);
out.println(to);
out.println(header);
out.println(body);
并使用
阅读String from = bufferedReader.readLine();
String to = bufferedReader.readLine();
String header = bufferedReader.readLine();
String body = bufferedReader.readLine();
答案 1 :(得分:2)
对于您的实际问题,已经给出了很好的答案,但是关于您的代码风格:
使用多个String + =调用非常低效。这是一个更高效的版本。
首先为cr + lf定义一个常量:
private static final String CRLF = "\r\n";
现在使用StringBuilder
构建String
,如下所示:
public char[] toArrayOfChar()
{
return new StringBuilder()
.append(from).append(CRLF)
.append(to).append(CRLF)
.append(header).append(CRLF)
.append(body).append(CRLF)
.append(header).append(CRLF)
.toString()
.toCharArray();
}
这更易于阅读且更高效(您的版本必须为每个+ =调用创建一个新的String实例)。
另外,也许您应该在对象的.toCharArray()
方法中编写此代码(减去toString()
行)并执行this.toString().toCharArray()
以获取char[]
。使用标准机制始终是一种很好的做法,这就是toString()
方法的用途,create a String representation of the object。