如何从Java中的InputStream对象中读取包含新行的字符串?

如何从Java中的InputStream对象中读取包含新行的字符串?,java,io,inputstream,Java,Io,Inputstream,我有一个Java服务器套接字: ServerSocket serverSocket = new ServerSocket(1000); 它接受clientSocket: Socket clientSocket; clientSocket = serverSocket.accept(); 到目前为止,我一直在阅读这样的输入: BufferedReader clientSocketInputStream = new BufferedReader(new InputStreamReader(cli

我有一个Java服务器套接字:

ServerSocket serverSocket = new ServerSocket(1000);
它接受clientSocket:

Socket clientSocket;
clientSocket = serverSocket.accept();
到目前为止,我一直在阅读这样的输入:

BufferedReader clientSocketInputStream = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while ((inputLine = clientSocketInputStream.readLine()) != null){
    String message = inputLine;
    // Hack the computer connecting to this one after here
但是,如果发送的文本类似

String stringToBeSent = "Hello\nHowareyou"; 
那我就有麻烦了。因为我需要这个文本。2个不同的字符串对我没有帮助

我怎么能照原样读呢


谢谢。

您只需逐字阅读即可

而不是读行。

两个选项:

  • 将多个字符串重新组合在一起

    StringBuilder sb = new StringBuilder()
    while ((inputLine = clientSocketInputStream.readLine()) != null)
    {
        String message = inputLine;
        sb.append(message);
        sb.append('\n');
    }
    String message = sb.toString();
    
  • 读取字节数组而不是字符串,使用
    BufferedInputStream
    而不是
    BufferedReader
    。然后使用有效的字符集将整个字节数组粉碎到字符串构造函数中。这将要求您知道字符串将包含多少字节


BufferedReader读取字符,直到获得“\n”、“\r”或“\r\n”。你可以一个字符一个字符地读,但它不会改变任何东西,因为你如何确定哪一行新字符显示了真正的新行

为什么不拆分(“\n”);在循环中“\n”永远不会进入循环@ааа不幸的是,我不知道字符串的长度。您无法控制通过套接字的内容?那么,选择选项一。使用StringBuilder将线重新缝合在一起。@KorayTugay这在我看来是合法的,事实是你不知道会发生什么。