在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了。
在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以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类型的变量就好了。综合来说,还是第二哥方法比较方便。