比BufferedReader.readLine()更好的方法?

问题描述:

使用ServerSocketBufferedReader.readLine()只有在客户端的线路终止时才会读取输入,是否有读取输入并在线路终止之前发送输出?比BufferedReader.readLine()更好的方法?

ServerSocket SRVSOCK = new ServerSocket(35553); 
while(true){ 
    Socket SOCK = SRVSOCK.accept(); 
    InputStreamReader IR = new InputStreamReader(SOCK.getInputStream()); 
    BufferedReader BR = new BufferedReader(IR); 

    String MESSAGE = BR.readLine(); 

    PrintStream PS = new PrintStream(SOCK.getOutputStream()); 
    System.out.println(MESSAGE); 
    PS.print("Returned Successfully"); 
} 
+0

如何被发送的数据?它是否在客户端缓冲? – dacwe 2013-03-19 11:07:37

+0

@dacwe这是我不知道的部分,我所知道的是当客户端终止该线时服务器收到数据。 – user2186161 2013-03-19 11:21:15

+0

@ user2186161只是根据java代码约定的一个建议变量跟随类似于句子的情况,即在双变量的情况下新词的首字母大写。你可以使用例如:ServerSocket serverSocket = new ServerSocket(35553);毕竟,遵循代码惯例是很好的,而不是所有的资本变量。 – Lakshmi 2013-03-19 11:37:51

你可以用bufferedReader.read()去将返回值一个字符时

StringBuffer response = "";  

while ((c = bufferedReader.read()) != -1) 
{ 
     //Since c is an integer, cast it to a char. If it isn't -1, it will be in the correct range of char. 
     response.append((char)c) ; 
} 

如果你用这种方法去,就看你要弄清楚的时候就可以开始解析结果并发送回复。

+0

我不擅长char,response.append说_方法append(char)对于String_类型是未定义的。响应是一个字符串? – user2186161 2013-03-19 11:19:38

+0

它应该是(请参见示例中的定义) – 2013-03-19 11:20:48

+0

我意识到我忘记了大写'String' – 2013-03-19 11:21:11

看一看this回答。

您可以将输入读取到大小受您控制的缓冲区中。

(道歉,如果链接到自己的答案被认为是不好。感觉就像重新使用。我们的开发者毕竟。)

+0

它工作得很好,thx :) – user2186161 2013-03-19 11:37:53

+0

这是肯定不坏,链接到现有的答案!如果它是你的或不是无关紧要,只要它对实际问题有贡献。 – user905686 2013-03-19 12:41:24