问题:使用http进行byte[]传输时,将byte[]转为json占用的内存空间会增加三倍左右。
解决:将byte[]数组通过Base64转成String类型,上传String类型,服务端接收到String之后再通过Base64解密成byte[]。

//客户端
String base64Str = Base64.getEncoder().encodeToString(byteArray);
//服务端
byte [] byteArray = Base64.getDecoder().decode(base64Str);

如果客户端是android应用,太低的android系统版本不支持自带的Base64。可以使用以下代码。所有版本都适配。

package com.eryuan.util;import android.text.TextUtils;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class Base64 {private static final char last2byte = (char) Integer.parseInt("00000011", 2);private static final char last4byte = (char) Integer.parseInt("00001111", 2);private static final char last6byte = (char) Integer.parseInt("00111111", 2);private static final char lead6byte = (char) Integer.parseInt("11111100", 2);private static final char lead4byte = (char) Integer.parseInt("11110000", 2);private static final char lead2byte = (char) Integer.parseInt("11000000", 2);private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q','R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd','e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3','4', '5', '6', '7', '8', '9', '+', '/'};/*** base64加密** @param from* @return*/public static String encode(byte[] from) {StringBuffer to = new StringBuffer((int) (from.length * 1.34) + 3);int num = 0;char currentByte = 0;for (int i = 0; i < from.length; i++) {num = num % 8;while (num < 8) {switch (num) {case 0:currentByte = (char) (from[i] & lead6byte);currentByte = (char) (currentByte >>> 2);break;case 2:currentByte = (char) (from[i] & last6byte);break;case 4:currentByte = (char) (from[i] & last4byte);currentByte = (char) (currentByte << 2);if ((i + 1) < from.length) {currentByte |= (from[i + 1] & lead2byte) >>> 6;}break;case 6:currentByte = (char) (from[i] & last2byte);currentByte = (char) (currentByte << 4);if ((i + 1) < from.length) {currentByte |= (from[i + 1] & lead4byte) >>> 4;}break;}to.append(encodeTable[currentByte]);num += 6;}}if (to.length() % 4 != 0) {for (int i = 4 - to.length() % 4; i > 0; i--) {to.append("=");}}return to.toString();}/*** md5加密** @param string* @return*/public static String md5(String string) {if (TextUtils.isEmpty(string)) {return "";}MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(string.getBytes());String result = "";for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) {temp = "0" + temp;}result += temp;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";}}

Java传输文件使用Base64优化传输速率。相关推荐

  1. Java之文件和base64字符串互转

    项目中有时需要通过接口传输文件,则一般通过将文件转为base64字符串进行传输. 需要引入的包: <dependency><groupId>commons-codec</ ...

  2. java中文件转Base64字符串及Base64字符串转文件

    文件转Base64字符串及Base64字符串转文件 import org.apache.commons.codec.binary.Base64;/** * @Description: 文件转为base ...

  3. java传输文件暂停_java – 在文件下载中实现暂停/恢复

    我试图在我的下载管理器中实现暂停/恢复,我搜索网页并阅读几篇文章,并根据他们修改代码,但恢复似乎无法正常工作,任何想法? if (!downloadPath.exists()) downloadPat ...

  4. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...

    org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...

  5. java scp发送文件到服务器,Java实现往远程服务器传输文件

    Java实现往远程服务器传输文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei ...

  6. java压缩文件耗时:30秒到1秒的优化过程

    点击上方蓝字关注我们 有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去.之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以 ...

  7. java p2p文件传输_P2P文件传输软件的设计与实现

    摘要:本系统是在深入了解P2P技术和JAVA实现平台的基础上,设计实现的基于JAVA的P2P文件传输软件,在局域网内实现点对点的文件传输功能.本系统的优点是在一个网络内每个Windows平台的客户机只 ...

  8. 优化传输文件的性能- -零拷贝

    优化传输文件的性能- -零拷贝 文章目录 优化传输文件的性能- -零拷贝 一.为什么要有 DMA 技术? 二.传统的文件传输有多糟糕? 三.如何优化文件传输的性能? 四.如何实现零拷贝? mmap + ...

  9. java rmi 文件传输_JAVA-RMI实现大文件传输

    在使用java-rmi的过程中,必然会遇到一个文件上传的问题,由于在rmi中无法传输文件流(比如rmi中的方法参数不能是FileInputStream之类的),那么我们只好选择一种折中的办法,就是先用 ...

  10. java如何实现tcp传输图像_如何在java中实现TCP服务器和TCP客户端传输文件

    我实现了简单的TCP服务器和TCP客户端类,可以从客户端发送消息到服务器,消息将在服务器端转换为大写,但是如何实现从服务器到客户端的传输文件,并从客户端上传文件到服务器.以下代码是我所得到的. TCP ...

最新文章

  1. 未来15年,人工智能将带给城市8种改变
  2. Java ACM模式
  3. docker下载安装,命令大全
  4. 【Flink】未解决 FLink 写 hive MemoryManager New Memory allocation smaller than the minimum allocation size
  5. python __call__
  6. MQTT 控制报文 - PUBLISH发布消息,PUBACK,PUBREC,PUBREL,PUBCOMP - 第6章
  7. 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?
  8. 二叉树 知道度 求节点数
  9. 2021十大 Python 机器学习库
  10. 顶级大厂如何做好暗黑模式设计?来看 Ant Design 的规范文档
  11. js获取IP地址的4种方法
  12. 中基鸿业人人都要懂的投资理财常识
  13. 测试思维:正向思维和逆向思维
  14. 数学建模——评价模型之层次分析法
  15. 0x00007FF818BAD646 (ucrtbased.dll)处(位于 通讯录.exe 中)引发的异常: 0xC0000005: 写入位置 0x000000000000000C 时发生访问冲突。
  16. 知道一点怎么设直线方程_已知两点坐标怎样求直线方程
  17. 学生Dreamweaver静态网页设计 基于HTML+CSS+JavaScript制作简食餐厅美食网站制作
  18. “创意不是想出来的”
  19. 计算机三种不同类型的用户账户,网络操作系统——Windows Server 2008篇 教学课件 1 作者 刘本军 李建利 [项目5]用户与组的管理.ppt...
  20. oracle10安装注意事项,科学网—Asianux server 3.0下安装oracle 10.2注意事项 - 谢安涛的博文...

热门文章

  1. BTA前瞻 | CyberMiles创始人卢亮:愿拿百万年薪求区块链人才
  2. HTML+CSS系列教程(第1—20课)
  3. 重装系统后小喇叭显示未安装音频输出设备
  4. 中国平安会不会成为美国的世通或者安然?
  5. 什么软件可以测试手长,手相测试扫一扫软件
  6. 苹果刷机有好处和坏处_观察 | iTools推越狱助手 欲扩张苹果市场版图
  7. Python寻找数组中重复数字
  8. MySQL DBLE_MySQL 中间件 - DBLE 简单使用
  9. 中国区边界shp文件以及STRM 90m DEM分享(百度云免费下载链接)
  10. 阿里云安全恶意程序检测冠军经验分享(万字长文)