当前位置: 首页 > news >正文

聊天室项目总结

已实现的功能点:

 存在的问题:

1.没有实现有含金量的创新功能点

2.太过于依赖工具,不喜欢自己看文章总结对知其然而不知其所以然,自己的理解比较少,懒于去思考

3.太过于依赖他人,自己的想法有点少,遇到bug会有退缩,不继续去探究,而去寻求更简单的方式

4.不够细心,总是出现一些非常小的bug

5.项目结构的理解还不够深刻,积极性不够,在后面也有些松懈

6.页面实现的太丑

学习到的东西:

msq基础  jdbc 的基本语句(后续还需要继续巩固),实现一个项目的基本结构(前后端的区别、长连接的实现),javafx的基本使用,debug的能力

需要做的事情:

1.再花一周时间去实现一个创新功能点,比如发送语音和语音通话,然后修改部分bug,优化界面,或者实现我想写却没有完成的地方,例如好友分组,黑名单

2.在完成上述要求后巩固mysql基础,刷部分算法题

3.继续学习下个项目所需要用到的东西

文件分片:

作用:

1.提升传输效率:通过传输多个分片,显著减少大文件传输时间(但是当文件比较小时,反而会加长文件传输的时间),充分利用网络资源

2.优化资源管理:支持对单个分片进行加密、压缩、或备份,降低管理复杂度

运用场景:(在我现在的水平能够用上和理解的基础上)

1.大文件传输与云存储

2.流媒体与在线播放

3.即使通讯与文件共享

实现过程:

1.在消息类中定义总分片个数大小和现在所传递的分片个数大小

public class Message implements Serializable {private static final long serialVersionUID = 1L;private Long id;private Long from_id;private String send_time;private int msg_type;private String content;private Long to_id;private user u;private int totalChunks;private int currentChunk;

 2.计算分片大小

分片个数大小=文件长度/分片大小

 // 文件信息String fileName = selectedFile.getName();long fileSize = selectedFile.length();Path filePath = selectedFile.toPath();// 分片参数配置final int CHUNK_SIZE = 1024 * 1024; // 1MBint totalChunks = (int) Math.ceil((double) fileSize / CHUNK_SIZE);

3.发送分片

 不断循环发送文件片数

// 分片发送try (InputStream inputStream = new FileInputStream(filePath.toFile())) {byte[] buffer = new byte[CHUNK_SIZE];int bytesRead;int chunkIndex = 0;while ((bytesRead = inputStream.read(buffer)) > 0) {Message chunkMsg = new Message();chunkMsg.setMsg_type(4);chunkMsg.setFrom_id(u.getId());chunkMsg.setTo_id(f.getId());chunkMsg.setIsperson(1);chunkMsg.setCurrentChunk(chunkIndex);chunkMsg.setTotalChunks(totalChunks);chunkMsg.setContent(fileName);chunkMsg.setFilesize(Long.toString(fileSize));chunkMsg.setPicture(Arrays.copyOf(buffer, bytesRead));oos.writeObject(markTool.sendMessage);oos.writeObject(chunkMsg);oos.flush();chunkIndex++;updateProgress(chunkIndex, totalChunks);}}showRight("文件发送成功: ",fileName);} catch (IOException e) {showAlert("错误", "文件发送失败");e.printStackTrace();}

 4.将分片文件写入临时目录,并且判断是否已经将所有分片进行发送,如果是则合并分片,并且删除临时分片,否则继续接收

Path tempDir = Paths.get(basePath, "temp", sanitizedFileName + "_temp");try {// 确保临时目录存在if (!Files.exists(tempDir)) {Files.createDirectories(tempDir);}// 写入分片(强制同步到磁盘)Path chunkFile = tempDir.resolve(currentChunk + ".part");Files.write(chunkFile, fileBytes, StandardOpenOption.CREATE, StandardOpenOption.SYNC);} catch (IOException e) {throw new IOException("分片写入失败: " + e);}if (currentChunk == totalChunks - 1) {try {// 合并前检查所有分片是否存在for (int i = 0; i < totalChunks; i++) {Path partFile = tempDir.resolve(i + ".part");if (!Files.exists(partFile)) {throw new IOException("缺失分片: " + partFile);}}// 合并文件Path finalPath = Paths.get(basePath, "uploads", UUID.randomUUID() + "_" + sanitizedFileName);Path uploadsDir = Paths.get(basePath, "uploads");if (!Files.exists(uploadsDir)) {Files.createDirectories(uploadsDir);}try (OutputStream os = Files.newOutputStream(finalPath)) {for (int i = 0; i < totalChunks; i++) {Path partFile = tempDir.resolve(i + ".part");Files.copy(partFile, os);Files.delete(partFile); // 删除分片}

 

 


 

相关文章:

  • 主成分分析的应用之sklearn.decomposition模块的PCA函数
  • [Android] 青木扫描全能文档3.0,支持自动扫描功能
  • 从0开始学linux韦东山教程第四章问题小结(1)
  • 单片机设计_停车场车位管理系统(AT89C52、LCD1602)
  • NDRange(OpenCL)和 Grid/Block(CUDA)对比
  • oppo手机安装APK失败报错:安装包异常
  • ngx_http_referer_module 模块概述
  • HTTPS的工作过程
  • 2025/5/18
  • 卷积神经网络进阶:转置卷积与棋盘效应详解
  • esp32课设记录(二)lcd屏显示文字与照片
  • 雷军直面小米危机:SU7 事故余波未平,玄戒 O1 力挽狂澜
  • 水平可见直线--上凸包(andrew算法
  • 【藏经阁】加密机服务完整解决方案,包含客户端+服务端
  • AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
  • 【方法论】如何构建金字塔框架
  • 实操分享java应用容器化,使用docker作为容器工具
  • Cursor:简单三步提高生成效率
  • 想要建站但没有服务器?雨云RCA,免服务器即可搭建完整网站!!!
  • 目标检测新突破:用MSBlock打造更强YOLOv8
  • 推开“房间”的门:一部“生命存在的舞台” 史
  • 卿晨璟靓等用服刑经历“引流”,专家:将犯罪问题娱乐化会消解刑罚严肃性
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路
  • 人形机器人灵犀X2掌握新技能:有了“内心戏”,还会拳脚功夫
  • 上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 美国务院批准向土耳其出售导弹及相关部件,价值3.04亿美元