javascript和JQuery焦点图和代码特效大全
当前最流行的开源CMS网站系统大全
当前位置:主页 > 编程开发 > JAVA技术 >

JAVA-RMI实现大文件传输

来源:IT技术网编辑:一页书发布于:2013-06-24人围观Java实现大文件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,实现,大文件,相关的文章
有时间的话来看看IT界的突发事件