為什么要用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.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
FileServer
新聞熱點
疑難解答