【问题标题】:How can I read a String including new line from InputStream object in Java?如何从 Java 中的 InputStream 对象中读取包含换行符的字符串?
【发布时间】:2014-01-15 19:27:59
【问题描述】:

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

我怎样才能按原样阅读它?

谢谢。

【问题讨论】:

  • 为什么不拆分("\n");在循环内
  • "\n" 永远不会进入循环@яша

标签: java io inputstream


【解决方案1】:

两种选择:

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

    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 构造函数中。这将要求您知道字符串的字节数。

【讨论】:

  • 不幸的是,我无法知道字符串的长度。
  • 您无法控制通过套接字的内容?那么选择选项一。使用 StringBuilder 将线条缝合在一起。
  • @KorayTugay 对我来说似乎是合法的,事实是你不知道会发生什么。
【解决方案2】:

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

而不是读取行。

【讨论】:

    【解决方案3】:

    BufferedReader 读取字符,直到它获得“\n”、“\r”或“\r\n”。您可以逐个字符地阅读,但它不会改变任何内容,因为您将如何确定哪个换行符显示真正的换行符?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多