|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开收集读者局限:
本文是一篇冗长进门文章.本文假定读者对Java的IO体系和Java的收集体系有所懂得.
注释:
关于文件传输的成绩,实践也是一种IO读写的基础成绩.关于收集而言也是一种IO读写成绩.因而所谓收集的文件传输实践是两种IO成绩的综合会商.这里我们起首剖析一个图示.然后环绕这个图示来会商:
:
剖析我们基础能够晓得从服务器文件体系中经由过程流把文件中的数据写进到服务器的历程中,然后把历程中的数据经由过程收集IO体系传送到客户机,这个阶段,收集中的数据以字撙节的情势保留.当该字撙节被客户历程承受后,客户历程经由过程客户当地文件流写进客户当地的文件体系中.
依据以上剖析,我们基础能够断定我所必要处置的成绩了.起首我们必要能够对当地文件体系IO操纵的操纵接口,然后是一个能够对收集IO体系举行操纵的操纵接口,已一个能够把数据包装成字撙节的操纵接口,他们分离能够供应客户和服务器两个历程举行读写的操纵.以下图所示:
:
依据以上剖析,我们能够把成绩回结到对以下编程接口的需求上:
1.字节包装器和字节解包器,
2.收集传输器和收集吸收器
3.当地文件读/写器
而这些Java自己的API就已供应.他们都被包装到java.io和java.net这两个包里,这里我供应一个基于TCP/IP的完成版本,利用基于毗连的体例来完成事情.我们起首先容几个相干的JDK中的类来完成以上义务,
1.DataOutputStream和DataInputStream完成类供应了下面的字节包装息争包器的完成
2.ServerSocket和Socekt供应了基于毗连的收集传输和承受接口
3.File,FileInputStream和FileOutputStream供应了基础的当地文件输出输入接口.
服务器端完成代码:
importjava.io.*;
importjava.net.*;
publicclassFileServer{
publicstaticvoidmain(String[]args)throwsException{
//创立文件流用来读取文件中的数据
Filefile=newFile("lishengjie.jpg");
FileInputStreamfos=newFileInputStream(file);
//创立收集服务器承受客户哀求
ServerSocketss=newServerSocket(3108);
Socketclient=ss.accept();
//创立收集输入流并供应数据包装器
OutputStreamnetOut=client.getOutputStream();
OutputStreamdoc=newDataOutputStream(newBufferedOutputStream(netOut));
//创立文件读取缓冲区
byte[]buf=newbyte[2048];
intnum=fos.read(buf);
while(num!=(-1)){//是不是读完文件
doc.write(buf,0,num);//把文件数据写出收集缓冲区
doc.flush();//革新缓冲区把数据写往客户端
num=fos.read(buf);//持续从文件中读取数据
}
fos.close();
doc.close();
}
}
客户方完成代码:
importjava.io.*;
importjava.net.*;
publicclassFileClient{
publicstaticvoidmain(String[]args)throwsException{
//利用当地文件体系承受收集数据并存为新文件
Filefile=newFile("newFile.jpg");
file.createNewFile();
RandomAccessFileraf=newRandomAccessFile(file,"rw");
//经由过程Socket毗连文件服务器
Socketserver=newSocket(InetAddress.getLocalHost(),3108);
//创立收集承受流承受服务器文件数据
InputStreamnetIn=server.getInputStream();
InputStreamin=newDataInputStream(newBufferedInputStream(netIn));
//创立缓冲区缓冲收集数据
byte[]buf=newbyte[2048];
intnum=in.read(buf);
while(num!=(-1)){//是不是读完一切数据
raf.write(buf,0,num);//将数据写往文件
raf.skipBytes(num);//按次写文件字节
num=in.read(buf);//持续从收集中读取文件
}
in.close();
raf.close();
}
}
回结以上代码:
服务器
客户端
1.服务器从当地文件体系读取文件
2.服务器创立收集服务毗连
3.服务器供应数据包装器
4.服务器将当地文件写进数据包装器
5.服务器经由过程包装器写进到收集
1.客户端创建新文件筹办存储来自收集的数据
2.客户端毗连服务器
3.客户端经由过程收集承受服务器数据并举行数据解包
4.客户端将数据写进缓冲区
5.客户端从缓冲区把数据写进客户当地文件
总结:
现实上java的开辟情况为我们供应年夜多半的编程接口,为我们简化了开辟事情量.我们经由过程java的IO接口所供应的文件,数据包装器等接口十分便利的办理了我们下面的开辟事情量.同时在java的net接口所供应的套接字也使得基于毗连的数据承受和发送成为十分简单的事情.
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。 |
|