注意事項:readLine()要求有換行標識,write()要輸出換行標識,要調用flush()刷新緩沖區。
以下是取自java socket通信中的一小段代碼。
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String input = null;
while(!"bye".equalsIgnoreCase(input=reader.readLine())){
System.out.println("client傳來數據:"+input);
writer.write("我接收到你的數據:"+input);
writer.newLine();
writer.flush();
}
上面的java Socket通信用到了BufferedReader的readLine()方法和BufferedWriter的write()方法。
注意readLine()方法,通過查看JDK中關於此方法的凝視可知,它是讀取一行數據,這行數據的末尾必須有換行符標識符說明到此為止是一行。不然readLine()方法無法順利讀取。
所以在server端或client進行輸出的時候必須輸出換行標識(\n),讓對方能夠順利讀取一行。因此能夠這樣寫writer.write("hello world\n")。
為了更好地使用java的跨平台特性。BufferedWriter提供了一個newLine()方法,該方法就是專門輸出一個換行符。所以也能夠這樣寫writer.write("hello world");writer.newLine();
另外既然是BufferedWriter,自然用到了緩沖。當你輸出的字符長度不超過緩沖區時,可能不會被輸出,這時候程序也無法正常執行。所以要用writer.flush();刷新緩沖區。也就是說writer.write("我接收到你的數據:"+input);writer.newLine();writer.flush();必須一起使用,它們總是同一時候出現,因此你能夠自己定義一個方法,包括這三個方法。
public void writeLine(String msg){
writer.write(msg);
writer.newLine();
writer.flush();
}