91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用java-RMI進行大文件傳輸

發布時間:2021-10-29 17:03:37 來源:億速云 閱讀:99 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關如何利用java-RMI進行大文件傳輸,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

為什么要用RMI

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

文件上傳問題

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

這樣做也有缺點,就是無法檢驗傳輸過來的數據的準確性,汗。。。

下面我就一個實例來講解一下

文件結構

如何利用java-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進行大文件傳輸有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马公市| 樟树市| 隆安县| 东乌| 六枝特区| 浪卡子县| 宜阳县| 朔州市| 宾阳县| 屏边| 赣州市| 利津县| 广河县| 东台市| 深州市| 兴宁市| 永平县| 厦门市| 广宁县| 垫江县| 隆德县| 凌海市| 茶陵县| 张家界市| 庆城县| 读书| 酒泉市| 呼图壁县| 河西区| 夹江县| 宜都市| 万年县| 孙吴县| 浮山县| 上思县| 磐石市| 新龙县| 平和县| 尼木县| 阿拉善左旗| 尼勒克县|