Java傳輸檔案使用Base64優化傳輸速率。
問題:使用http進行檔案傳輸時,將檔案的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 "";
}
}
相關文章
- wtfpd檔案傳輸使用
- 【多檔案自平衡雲傳輸】使用展示 —— 檔案傳輸系統
- 通訊原理中碼元,碼元傳輸速率,資訊傳輸速率
- 什麼是極速檔案傳輸,極速檔案傳輸如何進行大檔案傳輸
- 大檔案傳輸軟體的優勢有哪些?-鐳速傳輸
- 鐳速傳輸:如何快速傳輸大檔案?
- Linux 檔案傳輸Linux
- sftp 傳輸檔案FTP
- scp 傳輸檔案
- 大檔案如何傳輸,大檔案的傳輸方式有哪些?
- 鐳速傳輸:安全檔案傳輸的意義
- 鐳速傳輸淺談TLS 和檔案傳輸TLS
- 檔案傳輸協議的五種安全檔案傳輸替代方案協議
- 還在使用檔案傳輸協議傳輸機密檔案?你可能是對檔案傳輸協議有什麼誤會協議
- 什麼是檔案傳輸,介紹檔案傳輸的發展程式
- 有了大檔案傳輸加速功能,不再擔憂傳輸大檔案
- 如何快速傳輸大檔案:4 種大檔案傳輸有效的方法
- 如何將超大檔案傳輸給別人,超大檔案如何傳輸呢?
- C# Socket 檔案傳送傳輸C#
- 在java中使用SFTP協議安全的傳輸檔案JavaFTP協議
- 什麼是高延遲檔案傳輸?為什麼要使用高延遲檔案傳輸
- rz檔案傳輸失敗
- ios檔案同步傳輸工具iOS
- SyncBird Pro檔案傳輸工具
- Mac Linux檔案互相傳輸MacLinux
- 揭秘|國內影視檔案傳輸的真相,跨境檔案傳輸更不簡單
- 常見的ftp檔案傳輸工具有哪些?推薦ftp檔案傳輸工具FTP
- 企業經常需要進行傳輸檔案,大檔案傳輸有哪些方法?
- 鐳速傳輸,大檔案傳輸軟體的快速通道
- 跨境檔案傳輸換上鐳速傳輸,看看能提速多少?
- 鐳速傳輸是如何管理大檔案跨國傳輸的
- TransData資料傳輸速率監測工具
- 如何實現檔案高速傳輸,推薦鐳速高速檔案傳輸解決方案
- 跨國檔案傳輸軟體有哪些?跨國檔案傳輸遇到的問題
- 鐳速傳輸:不是所有的檔案傳輸系統都叫MFT
- 鐳速傳輸:TB級大檔案傳輸,一招教你搞定
- 鐳速傳輸升級,別再用Email和FTP傳輸檔案了AIFTP
- FTP VS鐳速傳輸,小檔案傳輸技術內有乾坤FTP