如何在Java中读取包含来自InputStream对象的新行的String?

时间:2013-12-28 10:50:09

标签: java io inputstream

我在Java中有一个ServerSocket:

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个不同的字符串不帮助我。

我怎么能按原样阅读?

感谢。

3 个答案:

答案 0 :(得分:2)

您可以简单地逐字逐句阅读。 http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#read()

而不是读取行。

答案 1 :(得分: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读取字节数组而不是字符串。然后使用有效的字符集将整个字节数组粉碎到String构造函数中。这将要求您知道String将包含多少字节。

答案 2 :(得分:1)

BufferedReader读取字符,直到它变为“\ n”,“\ r”或“\ r \ n”。你可以逐个字符地阅读,但它不会改变任何东西,因为你如何确定哪个新的线路特征显示真正的新线?