標籤:socket編程 bufferedreader bufferedwriter
注意事項: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("用戶端傳來資料:"+input);
writer.write("我接收到你的資料:"+input);
writer.newLine();
writer.flush();
}
上面的java Socket通訊用到了BufferedReader的readLine()方法和BufferedWriter的write()方法。
注意readLine()方法,通過查看JDK中關於此方法的注釋可知,它是讀取一行資料,這行資料的末尾必須有分行符號標識符說明到此為止是一行。不然readLine()方法無法順利讀取。
所以在伺服器端或用戶端進行輸出的時候必須輸出換行標識(\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();
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java Socket通訊使用BufferedReader和BufferedWriter的注意事項