在讀取完流后,服務端會向客戶端返回一些數據,告訴客戶端,已經寫完了。
在這里和”流操作—拿到源后的寫入動作“差不多,客戶端同樣以byte與Buffered兩種緩沖讀取作為例子,同時,。也是希望大家給補充。
1.利用OutputStream向客戶端回寫,客戶端用byte作為緩沖接收
向客戶端回寫:
1 //獲取socket輸出流,將上傳成功字樣傳給客戶端 2 OutputStream out=s.getOutputStream(); 3 out.write("上傳成功".getBytes());
客戶端接收:
1 //讀取服務端返回的數據 2 InputStream in=s.getInputStream(); 3 4 byte [] bufIn=new byte[1024]; 5 6 int lenIn=in.read(buf); 7 8 String text=new String(buf,0,lenIn); 9 System.out.println(text);
2.利用PrintWriter向客戶端回寫,客戶端用Buffered作為緩沖接收
向客戶端回寫:
1 //向客戶端返回數據,用PrintWriter 2 PrintWriter out =new PrintWriter(s.getOutputStream(),true); 3 4 out.println("上傳成功");
客戶端接收
1 //讀取服務端返回的對象 2 BufferedReader bufrIn =new BufferedReader(new InputStreamReader(s.getInputStream())); 3 String str=bufrIn.readLine(); 4 System.out.println(str);
區別:
1.PrintWriter作為一個便捷的字節流與字符流之間的轉換工具,已經封裝了轉換的方法,直接使用它回寫的時候,不用再使用getBytes()轉換成字節流。
2.在接受數據時,如果用byte數組接收,將得到的字節流寫入數組后,得把它轉化為一個String的對象,用String(數組名,第一個索引,長度),而用緩沖流接收時,需要用InputStreamReader轉化,但是最后直接賦值給一個是String類型的變量就好了。綜合來說,還是第二哥方法比較方便。