激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java使用rmi傳輸大文件示例分享

java使用rmi傳輸大文件示例分享

2019-10-27 12:19java技術網 JAVA教程

由于在rmi中無法傳輸文件流,可以先用FileInputStream將文件讀到一個Byte數組中,然后把這個Byte數組作為參數傳進RMI的方法中,然后在服務器端將Byte數組還原為outputStream,這樣就能通過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(); 

        } 

    } 
   

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片福利| 欧美一级黄色网 | 西川av在线一区二区三区 | 91羞羞| 91久久久久久久 | 久久久久99999 | 奇米影视亚洲春色 | 91精品国产一区二区三区四区在线 | 亚洲一区二区三区视频免费 | 国产羞羞视频免费在线观看 | 一色桃子av大全在线播放 | 精品一区二区三区在线观看国产 | 免费一级毛片在线播放视频 | avav在线播放 | av免费入口 | 精品国产一区二区三区久久久 | 免费在线国产 | 久久国产精品久久久久久电车 | 在线观看视频毛片 | 91懂色 | 久久精品国产99久久6动漫亮点 | 欧美日韩在线视频一区 | 欧美成人一级片 | 视屏一区 | 操你视频| 欧美a区| 欧美一区二区片 | 黄色高清视频网站 | 99亚洲| 国产va在线观看 | 国产日产久久久久久 | 久久久久久免费 | 久久精品成人免费国产片桃视频 | 午夜精品小视频 | 国产免费午夜 | 久久人人爽人人爽人人片av免费 | 亚洲一区动漫 | 黄色成人在线播放 | 末成年女av片一区二区 | 精品一区二区三区在线播放 | 欧美性猛交xxx乱大交3蜜桃 |