java网络编程TCP传输—流操作—拿到源后的写入动作

时间:2023-03-09 09:07:08
java网络编程TCP传输—流操作—拿到源后的写入动作

  在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充····

1.利用byte数组作为一个缓冲区进行读写

客户端上传

 //获取socket流,将图片上传给服务端
FileInputStream fis=new FileInputStream("c:\\12.jpg"); //获取了输出流
OutputStream out=s.getOutputStream(); //用数组作为缓冲
byte[]buf=new byte[1024]; //len用来记录长度
int len=0; //循环读写
while((len=fis.read(buf))!=-1){
//当返回-1时表示读完毕,此时len为总长度
out.write(buf,0,len);
}
//服务端接收时

 1 InputStream in=s.getInputStream();
File dir=new File("c:\\pic");
if(!dir.exists()){
dir.mkdirs();
}
FileOutputStream fos=new FileOutputStream("server.jpg");
byte[] buf=new byte[1024];
int len=0;
while((len=in.read())!=-1){
fos.write(buf,0,len);
}

 服务端接收(不需要写入文件中时)

 byte [] buf=new byte[1024];
//此时只需要或取长度就可以了
int len=in.read(buf);
//直接用数组获取文本就可以了
String text=new String(buf,0,len);

2.使用缓冲区作为缓冲

       //客户端上传

        //使用流输出数据
       BufferedReader bufr=new BufferedReader(new FileReader("client.txt")); //通过使用PrintWriter对字节流和字符流进行处理,接管流
PrintWriter out =new PrintWriter(s.getOutputStream(),true); //开始读取,上传给服务端
String line=null;
while((line=bufr.readLine())!=null){
out.println(line);
}
       //服务端接收

  
      //将接收的数据放入流中
BufferedReader bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream())); //指定要写入得文件
BufferedWriter bufw=new BufferedWriter(new FileWriter("server.txt")); //开始读取
//缓冲区的默认大小为8k,一到8k则会自动刷新,若没有结束标志,则得到的文件大小一定是8的倍数
String line=null;
while((line=bufIn.readLine())!=null){
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
//自己写刷新
bufw.flush();
}