java 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("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();

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM