java.使用RMI实现上传和下载

本文档介绍了一个使用RMI实现的简易Git系统,仅包含上传和下载功能,不涉及版本控制。功能包括初始化仓库、显示仓库信息、删除仓库、查看文件详情、提交文件和克隆仓库。通过RMI设计了IGit接口,实现了上传三件套(start、file、end)和下载三件套(start、next、file)。详细阐述了上传和下载的流程,并提供了GitHub链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • OK来搞我的实验作业了

  • 打算模拟一个简单的git
  • 在我看来一个简单的git,无非就是上传和下载
  • 没有版本控制,没有分支控制,什么也没有
  • 仅作为一个云端保存代码的工具
  • 那么问题来了,如果没有版本控制的功能,还能称之为git吗
  • git版本控制原理

功能设计

  • 需求就是我要完成作业啦

  • > GitClient init [repository name]

    • 将当前工作目录注册到远程reponsity,之后再在此目录下的commit操作将把此目录下的文件上传到远程的reponsity文件夹中
  • > GitClient show
    • 显示远程repository及其绑定的工作目录
  • > GitClient del [repository name]
    • 删除远程reponsity文件夹
  • > GitClient info [repository name] [detail]
    • 显示远程reponsity文件夹下的文件,并打印其对应的本地工作目录
  • > GitClient commit [repository name]
    • 将当前工作目录下的文件夹上传到注册的reponsity中
    • 不允许同一本地工作目录对应多个远程reponsity
  • > GitClient clone [repository name]
    • 将远程reponsity文件夹里的文件下载到当前工作目录

RMI设计

  • IGit接口设计(部分)
    • regRepository(String path,String repository)
    • delRepository(String repository)
    • showReponsities()
    • 上传三件套
      • uploadFileStart(String repository,String filepath)
      • uploadFile(String uploadID,byte[] data,int start,int len)
      • uploadFileEnd(String uploadID)
    • 下载三件套
      • downloadRepositoryStart(String repository)
      • download_next(String downloadID)
      • downloadFile(String downloadID)
    • mkdir(String repository,String dir)
    • clearRepository(String repository)
    • infoRepository(String repository)

上传和下载

上传部分

  • String uploadFileStart(String repository,String filepath)
    • client调用此函数,声明上传的repository和相对于repository的filepath
    • server建立outputstream,生成一个随机的id与此输出流绑定,并返回此id作为该文件的uoloadid
    • client获得uploadid
  • uploadFile(String uploadID,byte[] data,int start,int len)
    • client根据uploadid上传对应的数据
  • uploadFileEnd(String uploadID)
    • client上传结束后,通知server上传文件完成

下载部分

  • String downloadRepositoryStart(String repository)
    • client请求下载某个repository
    • server收到请求,遍历此repository下的所有文件,并将数据分块形成一个数据队列中(存在于server端的内存里)
    • server生成一个随机的id与此队列绑定,并返回此id作为downloadid
    • client收到downloadid
  • download_next(String downloadID)
    • client根据downloadid,询问server端数据队列是否为空
  • downloadFile(String downloadID)
    • 若server端数据队列非空,则凭借downloadid,client可以获取一块数据

代码

GitHub传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值