如何使用BufferedReader读取多行?

时间:2014-05-10 16:18:06

标签: java objective-c sockets

我正在从Xcode(用户在textView上输入)向Java服务器发送文本。 文本可能包含多行。 问题是在接收文本时,只读取偶数行。 这是我的代码。

服务器:

            StringBuilder sb = new StringBuilder();
            while(inFromClient.readLine()!=null){   //infromClient is the buffered reader

                sb.append(inFromClient.readLine());
                sb.append('\n');
            }
            System.out.println ("------------------------------");
            System.out.println (sb.toString()); //the received text

客户方:

           NSString *notecontent=[NSString  stringWithFormat:@"%@",self.ContentTextView.text];
        NSData *notecontentdata = [[NSData alloc] initWithData:[notecontent dataUsingEncoding:NSASCIIStringEncoding]];
        [outputStream write:[notecontentdata bytes] maxLength:[notecontentdata length]];

2 个答案:

答案 0 :(得分:4)

你消耗了三行:

  1. 检查下一行是否有
  2. 印刷线
  3. 存储一个。
  4. 注意到这里:

    while(inFromClient.readLine()!=null) { //1.
        System.out.println (inFromClient.readLine()); //2.
        sb.append(inFromClient.readLine()); //3.
        sb.append('\n');
    }
    

    将该行存储在String中,然后使用它执行您想要/需要的操作:

    String line = "";
    while ((line = inFromClient.readLine()) != null) {
        System.out.println(line);
        sb.append(line);
        sb.append('\n');
    }
    

答案 1 :(得分:2)

我认为问题是:

while(inFromClient.readLine()!=null){   //infromClient is the buffered reader
    System.out.println (inFromClient.readLine());
    sb.append(inFromClient.readLine());
    sb.append('\n');
}

问题,具体来说,是三个readLine()电话。每次通话都会从客户端读取另一行。所以你有效地阅读一行来检查客户端是否有要发送的内容,读取另一行并打印它,然后读取另一行并存储它。

你想要做的是将读取行存储在临时变量中,打印它,然后追加它:

String s;
while((s = inFromClient.readLine()) !=null){   //infromClient is the buffered reader
    System.out.println (s);
    sb.append(s);
    sb.append('\n');
}