我使用BufferedReader#readLine()从TCP / IP套接字获取文本行。
在同一个会话期间,我的服务器有时发送以\ r \ n结尾的行,有时它会发送仅使用\ n终止的行。
此行为不在我的控制之下:(
readLine()的Javadoc说:
“一条线被认为是换行符('\ n'),回车符('\ r')或回车符后面的任何一个终止。”
不幸的是,这似乎不起作用(至少在Windows上)。它只“知道”读取以\ r \ n结尾的行。
有什么建议吗?
提前致谢, 阿德里安。
答案 0 :(得分:1)
写了一个简单的套接字客户端并针对netcat服务器进行了测试。 问题是netcat服务器总是以UTF-8发送,客户端不能指望UTF-16。
以下是客户端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
public class LineReader {
/**
* @param args
*/
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("usage: java LineReader charset url");
System.exit(1);
}
try {
final String charset = args[0];
final URI url = new URI(args[1]);
final String host = url.getHost();
final int port = url.getPort();
final Socket socket = new Socket(host, port);
final BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream(), charset));
while (true) {
final String line = reader.readLine();
System.out.println(line);
}
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结论:readLine方法没有问题。
答案 1 :(得分:0)
尝试使用底层操作系统的line.separator属性:您可以按如下方式执行此操作:
static final String lineSeparator = System.getProperty ( "line.separator" );