java - 从java套接字读取行终止符不一致的行

标签 java readline bufferedreader terminator

我正在使用 BufferedReader#readLine() 从 TCP/IP 套接字获取文本行。

在同一 session 期间,我的服务器有时会发送以\r\n 结尾的行,有时会发送仅以\n 结尾的行。

这种行为不受我的控制:(

readLine() 的 Javadoc 说:

"A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed."

不幸的是,这似乎不起作用(至少在 Windows 上)。它只“知道”读取以\r\n 结尾的行。

有什么建议吗?

提前致谢, 阿德里安。

最佳答案

编写了一个简单的套接字客户端并针对 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 方法没有问题。

关于java - 从java套接字读取行终止符不一致的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694000/

相关文章:

java - 使用 Javadoc -link 选项链接到 javadoc.io

java - 存储在Web应用程序Java中的静态实例变量中

java - JSF 2.0 和参数化 EL 表达式的问题

C# ReadLine 问题

java - 当我尝试将 BufferedReader 中的字符串放入字符串数组时出现 NullPointer 异常

java - 为什么 Java Spring v.2.2.7 不支持请求方法 'POST'?

Python seek() 没有将指针移动到正确的位置

Linux 上的 Python cmd 不会自动完成特殊字符或符号

java - BufferedReader 未关闭警告未消失

java - 如何只读取一行文本文件?