Java_184_网络编程_IO_ByteArrayOutputStream_ByteArrayInputStream_文件输入输出_同等于上传存储_发送端_接收端

本文介绍了Java网络编程中利用IO流进行数据传输的方法,特别是ByteArrayOutputStream和ByteArrayInputStream的使用。通过示例展示了如何实现文件的输入输出,以及模拟上传存储的过程,包括发送端和接收端的详细步骤。
摘要由CSDN通过智能技术生成

工具类

package Ntework;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public  class UdpFileUtils {
//	public static void main(String[] args) {
//		byte[]s=dFile("abc.png");
//		xFile(s,"abcd.png");
//	}
	//读文件->字符数组
	 static byte[] dFile(String srcPath){
		File src=new File(srcPath);
		InputStream in=null;
		ByteArrayOutputStream byteArray=null;
		try{
			in=new FileInputStream(src);
			byteArray=new ByteArrayOutputStream();
			byte[] temp=new byte[1024];
			int len=0;
			while((len=in.read(temp))!=-1){
				byteArray.write(temp, 0, len);
			}
			byteArray.flush();
			return byteArray.toByteArray();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(in!=null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}
	
	//读字符数组->写文件
	 static void xFile(byte[] src,String srcPath){
		File newsrc=new File(srcPath);
		InputStream in=null;
		OutputStream out=null;
		try{
			in=new ByteArrayInputStream(src);
			out=new FileOutputStream(newsrc);
			byte[] temp=new byte[10];
			int len=0;
			while((len=in.read(temp))!=-1){
				out.write(temp, 0, len);
			}
			out.flush();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(out!=null){
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

接收端

package Ntework;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 
 * 文件:接收端
 * Address already in user:Cannot bind 同一个协议下端口不允许冲突
 * 1.使用DatagramSocket创建接收端,指定端口
 * 2.准备容器封装成DatagramPacket包裹
 * 3.阻塞式接收包裹receive(DatagramPacket p)
 * 4.分析数据byte[] getData()/getLength()
 * 5.释放资源
 * @author pmc
 *
 */
public class UdpFileServer {
	public static void main(String[] args) throws IOException{
		System.out.println("接收方启动中...");
		//使用DatagramSocket指定端口创建发送端
		DatagramSocket server=new DatagramSocket(9990); 
		//准备容器 封装成DatagramPacket包裹
		byte[] container=new byte[1024*60];
		DatagramPacket packet=new DatagramPacket(container,0,container.length);
		//阻塞式接收包裹receive(DatagramPacket p)
		server.receive(packet);
		//分析数据 byte[] getData()/getLength()
		byte[] datas=packet.getData();
		int len=packet.getLength();
		UdpFileUtils.xFile(datas, "xxxx.png");
		//释放资源
		server.close();
	}
}

发送端

package Ntework;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * 
 * 文件:发送端
 * 1.使用DatagramSocket创建发送端,指定端口
 * 2.准备数据转成字节数组
 * 3.分装成DatagramPacket包裹,需要指定目的地
 * 4.发送包裹send(DatagramPacket p)
 * 5.释放资源
 * 
 * 同一个协议下端口不允许冲突
 * @author pmc
 *
 */
public class UdpFileClient {
	public static void main(String[] args) throws IOException{
		System.out.println("发送方启动中...");
		//使用DatagramSocket指定端口创建发送端
		DatagramSocket client=new DatagramSocket(8881); 
		//准备数据转字节数组
		byte[] datas=UdpFileUtils.dFile("abc.png");
		//封装成DatagramPacket包裹,需要指定目的地
		DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9990));
		//发送包裹send(DatagramPacket p)
		client.send(packet);
		//释放资源
		client.close();
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Pmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值