如何利用java-RMI进行大文件传输
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,今天就跟大家聊聊有关如何利用java-RMI进行大文件传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为什么要用RMI在这次的项目中,对于客
千家信息网最后更新 2025年01月19日如何利用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安全错误
数据库的锁怎样保障安全
长春品质网络技术诚信经营
永兴学计算机软件开发学费多少
2018网络安全博览会vr设备
网络安全专家都有哪些
数据库中视图的优点节省空间
残疾人 软件开发
原神哔哩哔哩服务器在哪里
陕西智游网络技术有限公司
郑州软件开发的大品牌
网络安全应该考哪些证件
服务器 费电
dhcp服务器分配ip地址
数据库索引的实训报告总结
战地2开启服务器闪退
sql数据库限制最大
网络安全和信息化培训讲稿
网络安全知识竞赛每年都有吗
网络安全法 首席安全官
滕州市网络安全保障中心属于哪个单位
逃离塔科夫哪个是日本服务器
重庆市网络安全教育平台作业
200台服务器的温度
军队春节网络安全
软件开发费用化
通信网络安全详细设计步骤
网络安全测试高手联系方式
昌平网络安全监察
会考信息技术数据库操作题
数据库蒋政军
阿里云服务器学生认证