PrintWriterにおけるwriteとprintlnメソッドの違い


最近、サービス側とクライアントが互いに情報を送信すればよいというネットワークプログラミングの小さなプログラムが書かれています.その中でいくつかの問題が発見されたのは,IOストリームにデータを書く問題である.その中のwrite()メソッドは,それ自体が改行文字には書き込まれず,write()で情報が書き込まれた場合,反対側でreadLine()メソッドが用いられる.改行文字が読めないため、終了フラグが読めないことを意味し、IOストリームがブロックされているため、プログラムはずっとそこに詰まって動かない.理由は、リターンマークが欠けているためです.書き込み時に「r」を付けておけば、この問題は解決できます.println()には改行が自動的に加算されます.
次はクライアントのコードを貼ってこの問題を説明します.
client:
package javaSocketTest.com.ljl.javaSocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientSocketTest {

	public static void main(String[] args) {
		try {
			BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
			
			//     8000  
			Socket socket = new Socket("127.0.0.1",8000);
			System.out.println("      ");
			//    
			OutputStream os = socket.getOutputStream();
			OutputStreamWriter osw = new OutputStreamWriter(os);
			PrintWriter bw = new PrintWriter(osw);
			
			//    
			InputStream is = socket.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader reader = new BufferedReader(isr);
			
			String send = input.readLine();
			
			while(!send.equals("bye")){
				 bw.write(send + "");
		    Thread.sleep(2000);
		    bw.write("hello\r
"); bw.flush(); System.out.println("client:"+send); System.out.println("server:"+reader.readLine()); send = input.readLine(); } socket.close(); bw.close(); reader.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }

whileサイクルではキーコードであり,まずwrite()メソッドを用いてコンソール上の出力をIOストリームに書き込み,サービス側が受信していないことに気づき,2秒後に改行を追加した結果,通信は正常に戻った.