首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java RMI 實現大文件傳輸:字節數組方案完整示例

     編輯:Java 程式設計入門

技術選型背景

富客戶端架構下,RMI 與 Socket 為主要通信選項。RMI 優勢在於調用透明、序列化內建,劣勢是異語言互操作受限。本文採用「文件→字節數組→RMI 參數→字節數組→文件」折中方案。

架構組件

核心代碼解析

客戶端文件轉字節數組

private byte[] fileToByte(String filename) {
    File file = new File(filename);
    byte[] b = new byte[(int) file.length()];
    try (BufferedInputStream is = new BufferedInputStream(new FileInputStream(file))) {
        is.read(b); // 注意:大文件需分塊讀取,單次 read 不保證讀滿
    } catch (IOException e) { e.printStackTrace(); }
    return b;
}

服務端字節數組存文件

@Override
public void upload(String filename, byte[] fileContent) throws RemoteException {
    File file = new File(filename);
    if (!file.exists()) file.createNewFile();
    try (BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
        os.write(fileContent);
    } catch (IOException e) { e.printStackTrace(); }
}

服務啟動與註冊

LocateRegistry.createRegistry(9001);
Naming.rebind("rmi://localhost:9001/FileDataService", new FileDataService_imp());

方案局限與改進

  • 內存壓力:大文件全量讀入堆內存易導致 OOM,建議分塊傳輸(如 1MB/塊)
  • 完整性校驗:引入 MD5/SHA-256 校驗碼雙向驗證
  • 斷點續傳:服務端記錄已接收塊索引,客戶端續傳未完成部分
  • 替代方案:Netty/HTTP 分塊上傳、FTP/SFTP、對象存儲預簽名 URL

運行步驟

  1. 啟動 FileServer,Registry 啟動在 9001 端口
  2. 運行 FileClient,指定本地文件路徑與目標服務端路徑
  3. 驗證服務端目標目錄生成文件,大小一致
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
組件職責
FileDataService遠程接口,定義 upload(String filename, byte[] file)
FileDataService_imp服務端實現,字節數組寫入磁盤
FileServer註冊 RMI Registry,綁定服務
FileClient讀取文件為字節數組,調用遠程上傳