成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用java-RMI進(jìn)行大文件傳輸

開發(fā) 后端
Java RMI指的是遠(yuǎn)程方法調(diào)用 ,它不是什么新技術(shù)(在Java1.1的時(shí)代都有了),但卻是是非常重要的底層技術(shù)。它是一種機(jī)制,能夠讓在某個(gè) Java 虛擬機(jī)上的對(duì)象調(diào)用另一個(gè) Java 虛擬機(jī)中的對(duì)象上的方法。可以用此方法調(diào)用的任何對(duì)象必須實(shí)現(xiàn)該遠(yuǎn)程接口。

為什么要用RMI​

在這次的項(xiàng)目中,對(duì)于客戶端與服務(wù)器之間的通信,想了許多辦法,由于做的是富客戶端應(yīng)用,最終將技術(shù)選定在了RMI和Java-sockets兩種之間,其中RMI的靈活性不高,客戶端和服務(wù)器端都必須是java編寫,但使用比較方便,反觀java-sockets,雖然比較靈活,但需要自己規(guī)定服務(wù)器端和客戶端之間的通信協(xié)議。比較麻煩,幾經(jīng)權(quán)衡,最終還是選擇RMI來進(jìn)行服務(wù)器-客戶端通信

文件上傳問題

在使用java-rmi的過程中,必然會(huì)遇到一個(gè)文件上傳的問題,由于在rmi中無法傳輸文件流(比如rmi中的方法參數(shù)不能是FileInputStream之類的),那么我們只好選擇一種折中的辦法,就是先用FileInputStream將文件讀到一個(gè) Byte數(shù)組中,然后把這個(gè)Byte數(shù)組作為參數(shù)傳進(jìn)RMI的方法中,然后在服務(wù)器端將Byte數(shù)組還原為outputStream,這樣就能通過RMI 來傳輸文件了

這樣做也有缺點(diǎn),就是無法檢驗(yàn)傳輸過來的數(shù)據(jù)的準(zhǔn)確性,汗。。。

下面我就一個(gè)實(shí)例來講解一下

文件結(jié)構(gòu)

FileClient

  1. package rmiupload; 
  2.       
  3.     import java.io.BufferedInputStream; 
  4.     import java.io.File; 
  5.     import java.io.FileInputStream; 
  6.     import java.io.FileNotFoundException; 
  7.     import java.io.IOException; 
  8.     import java.net.MalformedURLException; 
  9.     import java.rmi.Naming; 
  10.     import java.rmi.NotBoundException; 
  11.     import java.rmi.RemoteException; 
  12.       
  13.     public class FileClient { 
  14.       
  15.         public FileClient() { 
  16.             // TODO Auto-generated constructor stub 
  17.         } 
  18.       
  19.         public static void main(String[] args) { 
  20.             try { 
  21.                 FileDataService fileDataService = (FileDataService) Naming.lookup("rmi://localhost:9001/FileDataService"); 
  22.                 fileDataService.upload("/Users/NeverDie/Documents/test.mp4"new FileClient().fileToByte("/Users/NeverDie/Music/test.mp4")); 
  23.             } catch (MalformedURLException | RemoteException | NotBoundException e) { 
  24.                 // TODO Auto-generated catch block 
  25.                 e.printStackTrace(); 
  26.             } 
  27.         } 
  28.     //這個(gè)方法比較重要,通過這個(gè)方法把一個(gè)名為filename的文件轉(zhuǎn)化為一個(gè)byte數(shù)組 
  29.         private byte[] fileToByte(String filename){ 
  30.             byte[] b = null
  31.             try { 
  32.                 File file = new File(filename); 
  33.                 b = new byte[(int) file.length()]; 
  34.                 BufferedInputStream is = new BufferedInputStream(new FileInputStream(file)); 
  35.                 is.read(b); 
  36.             } catch (FileNotFoundException e) { 
  37.             // TODO Auto-generated catch block 
  38.                 e.printStackTrace(); 
  39.             } catch (IOException e) { 
  40.                 // TODO Auto-generated catch block 
  41.                 e.printStackTrace(); 
  42.             } 
  43.             return b; 
  44.         } 
  45.     } 

FileDataService

  1. package rmiupload; 
  2.       
  3.     import java.net.URL; 
  4.     import java.rmi.Remote; 
  5.     import java.rmi.RemoteException; 
  6.       
  7.     public interface FileDataService extends Remote{ 
  8.       
  9.         //這里的filename應(yīng)該是該文件存放在服務(wù)器端的地址 
  10.         public void upload(String filename, byte[] file) throws RemoteException; 
  11.       
  12.     } 

FileDataService_imp

  1. package rmiupload; 
  2.       
  3.     import java.io.BufferedOutputStream; 
  4.     import java.io.File; 
  5.     import java.io.FileNotFoundException; 
  6.     import java.io.FileOutputStream; 
  7.     import java.io.IOException; 
  8.     import java.net.URL; 
  9.     import java.rmi.RemoteException; 
  10.     import java.rmi.server.RMIClientSocketFactory; 
  11.     import java.rmi.server.RMIServerSocketFactory; 
  12.     import java.rmi.server.UnicastRemoteObject; 
  13.       
  14.     public class FileDataService_imp extends UnicastRemoteObject implements FileDataService{ 
  15.       
  16.         public FileDataService_imp() throws RemoteException { 
  17.       
  18.         } 
  19.       
  20.         @Override 
  21.         public void upload(String filename, byte[] fileContent) throws RemoteException{ 
  22.             File file = new File(filename); 
  23.             try { 
  24.                 if (!file.exists()) 
  25.                     file.createNewFile(); 
  26.                 BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file)); 
  27.                 os.write(fileContent); 
  28.             } catch (FileNotFoundException e) { 
  29.                 // TODO Auto-generated catch block 
  30.                 e.printStackTrace(); 
  31.             } catch (IOException e) { 
  32.                 // TODO Auto-generated catch block 
  33.                 e.printStackTrace(); 
  34.             } 
  35.       
  36.     ;   } 
  37.       
  38.     } 

FileServer

  1. package rmiupload; 
  2.       
  3.     import java.net.MalformedURLException; 
  4.     import java.rmi.Naming; 
  5.     import java.rmi.RemoteException; 
  6.     import java.rmi.registry.LocateRegistry; 
  7.       
  8.     public class FileServer { 
  9.       
  10.         FileDataService fileDataService; 
  11.       
  12.         public FileServer() { 
  13.             try { 
  14.                 fileDataService = new FileDataService_imp(); 
  15.                 LocateRegistry.createRegistry(9001); 
  16.                 Naming.rebind("rmi://localhost:9001/FileDataService", fileDataService); 
  17.             } catch (RemoteException e) { 
  18.                 // TODO Auto-generated catch block 
  19.                 e.printStackTrace(); 
  20.             } catch (MalformedURLException e) { 
  21.                 // TODO Auto-generated catch block 
  22.                 e.printStackTrace(); 
  23.             } 
  24.       
  25.       
  26.         } 
  27.       
  28.         /** 
  29.          * @param args 
  30.          */ 
  31.         public static void main(String[] args) { 
  32.             new FileServer(); 
  33.       
  34.         } 
  35.       
  36.     } 

原文鏈接:http://my.oschina.net/wangxuanyihaha/blog/133894

責(zé)任編輯:陳四芳 來源: 開源中國博客
相關(guān)推薦

2014-04-28 09:29:36

2009-10-27 16:52:41

VB.NET文件傳輸

2013-12-20 11:05:13

IBM大數(shù)據(jù)Aspera

2020-11-23 17:25:37

鐳速聯(lián)合架構(gòu)存儲(chǔ)

2010-07-01 15:55:54

FTP文件傳輸協(xié)議

2017-02-27 20:24:27

Linux文件傳輸命令

2010-06-28 14:25:16

2012-03-19 10:35:51

ibmdw

2010-11-09 17:28:27

嗅探嗅探網(wǎng)絡(luò)TFTP

2013-06-10 16:28:23

2021-02-25 15:09:24

微信文件傳輸助手錄音

2010-12-08 12:34:46

文件傳輸

2021-06-07 00:03:31

HTTP大文件方案

2013-11-19 20:07:18

遠(yuǎn)程桌面文件文件傳輸

2009-09-07 13:38:03

C# HTTP文件傳輸HTTP文件傳輸

2010-06-09 15:40:01

FTP文件傳輸協(xié)議

2024-11-28 14:12:58

2020-11-13 08:30:57

Socket

2014-09-17 09:24:30

2023-06-06 08:57:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 69福利影院 | 亚洲情综合五月天 | 一级黄色片毛片 | 欧美精品成人 | 久久久久久成人 | 在线观看国产三级 | 精品视频一区二区三区在线观看 | 日韩不卡视频在线观看 | 亚洲视频免费在线播放 | 亚洲一区二区三区久久久 | 亚洲精品视 | 久久久123 | 日本一区二区三区在线观看 | 免费久久网| 三极网站 | 欧美国产中文 | 亚洲国产视频一区二区 | 久久久新视频 | 日韩亚洲一区二区 | 亚洲精品一区二区三区中文字幕 | 欧美亚洲视频在线观看 | 国产在线看片 | 国产91在线 | 欧美 | 99精品视频在线观看免费播放 | 国产欧美精品一区二区三区 | 蜜桃五月天| 欧美视频网 | 欧美黑人一级爽快片淫片高清 | 古装人性做爰av网站 | 久久国产成人 | 中文字幕一区二区三区精彩视频 | 国产精品美女在线观看 | 日本黄色免费视频 | 91精品久久 | 国产日韩精品视频 | 久久大陆| 国产成人精品一区二 | 久久综合久久久 | 99精品国产一区二区三区 | 亚洲综合在线视频 | 日韩美女在线看免费观看 |