如何利用java-RMI进行大文件传输
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天就跟大家聊聊有关如何利用java-RMI进行大文件传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为什么要用RMI在这次的项目中,对于客
千家信息网最后更新 2025年11月07日如何利用java-RMI进行大文件传输
今天就跟大家聊聊有关如何利用java-RMI进行大文件传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
为什么要用RMI
在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,反观java-sockets,虽然比较灵活,但需要自己规定服务器端和客户端之间的通信协议。比较麻烦,几经权衡,最终还是选择RMI来进行服务器-客户端通信
文件上传问题
在使用java-rmi的过程中,必然会遇到一个文件上传的问题,由于在rmi中无法传输文件流(比如rmi中的方法参数不能是FileInputStream之类的),那么我们只好选择一种折中的办法,就是先用FileInputStream将文件读到一个 Byte数组中,然后把这个Byte数组作为参数传进RMI的方法中,然后在服务器端将Byte数组还原为outputStream,这样就能通过RMI 来传输文件了
这样做也有缺点,就是无法检验传输过来的数据的准确性,汗。。。
下面我就一个实例来讲解一下
文件结构
FileClient
package rmiupload; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; public class FileClient { public FileClient() { // TODO Auto-generated constructor stub } public static void main(String[] args) { try { FileDataService fileDataService = (FileDataService) Naming.lookup("rmi://localhost:9001/FileDataService"); fileDataService.upload("/Users/NeverDie/Documents/test.mp4", new FileClient().fileToByte("/Users/NeverDie/Music/test.mp4")); } catch (MalformedURLException | RemoteException | NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //这个方法比较重要,通过这个方法把一个名为filename的文件转化为一个byte数组 private byte[] fileToByte(String filename){ byte[] b = null; try { File file = new File(filename); b = new byte[(int) file.length()]; BufferedInputStream is = new BufferedInputStream(new FileInputStream(file)); is.read(b); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } }FileDataService
package rmiupload; import java.net.URL; import java.rmi.Remote; import java.rmi.RemoteException; public interface FileDataService extends Remote{ //这里的filename应该是该文件存放在服务器端的地址 public void upload(String filename, byte[] file) throws RemoteException; }FileDataService_imp
package rmiupload; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.rmi.RemoteException; import java.rmi.server.RMIClientSocketFactory; import java.rmi.server.RMIServerSocketFactory; import java.rmi.server.UnicastRemoteObject; public class FileDataService_imp extends UnicastRemoteObject implements FileDataService{ public FileDataService_imp() throws RemoteException { } @Override public void upload(String filename, byte[] fileContent) throws RemoteException{ File file = new File(filename); try { if (!file.exists()) file.createNewFile(); BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file)); os.write(fileContent); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ; } }FileServer
package rmiupload; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; public class FileServer { FileDataService fileDataService; public FileServer() { try { fileDataService = new FileDataService_imp(); LocateRegistry.createRegistry(9001); Naming.rebind("rmi://localhost:9001/FileDataService", fileDataService); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { new FileServer(); } }看完上述内容,你们对如何利用java-RMI进行大文件传输有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
文件
服务器
服务
传输
客户
客户端
数组
方法
之间
内容
通信
办法
参数
就是
问题
选择
重要
准确性
地址
实例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
普法网络安全手抄报
服务器如何导入数据库
sql数据库生成脚本
濮阳淘宝软件开发
远元集团软件开发
tp框架切换数据库
英语学习类软件开发目的和意义
网络运维与网络安全工程师薪资
数据库语句计算方法
分辨率显示服务器连接失败
中班网络安全课
qt服务器与客户端
数据库的箭头指向问题
电网 网络安全 apt
广州跨乐互联网科技有限公司
如何用电脑代理国际服务器
泗洪工业网络技术联系方式
rtc 时间服务器
长沙智能软件开发机构
tsn网络技术的设备
应聘软件开发怎么介绍自己
大二网络安全
2018河北省网络安全竞赛
网络安全法的意义包括哪几个
副驾驶视频软件开发
阿里云ecs服务器linux
网站数据库有免费的没有
匠心网络技术有限公司
数据库营销遇到的问题
路由器怎么设置网络安全防护