仓酷云
标题:
JAVA编程:Java 收集文件传输
[打印本页]
作者:
飘飘悠悠
时间:
2015-1-18 11:41
标题:
JAVA编程:Java 收集文件传输
但是一些大型开发或者是保密型比较高的项目都会用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%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
作者:
谁可相欹
时间:
2015-1-21 12:52
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者:
愤怒的大鸟
时间:
2015-2-1 18:01
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
金色的骷髅
时间:
2015-2-6 22:08
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者:
只想知道
时间:
2015-2-9 10:38
是一种突破用户端机器环境和CPU
作者:
小妖女
时间:
2015-2-19 04:26
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者:
透明
时间:
2015-3-6 12:45
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者:
因胸联盟
时间:
2015-3-13 01:07
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者:
海妖
时间:
2015-3-13 01:07
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
再现理想
时间:
2015-3-13 01:07
Java 编程语言的风格十分接近C、C++语言。
作者:
蒙在股里
时间:
2015-3-13 01:07
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
柔情似水
时间:
2015-3-14 14:25
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者:
若相依
时间:
2015-3-21 09:40
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
灵魂腐蚀
时间:
2015-3-28 05:15
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者:
兰色精灵
时间:
2015-3-31 19:00
Java 编程语言的风格十分接近C、C++语言。
作者:
仓酷云
时间:
2015-4-7 17:32
是一种为 Internet发展的计算机语言
作者:
不帅
时间:
2015-4-10 19:52
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者:
admin
时间:
2015-4-23 06:08
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
分手快乐
时间:
2015-4-29 14:56
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者:
莫相离
时间:
2015-5-6 12:10
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2