精确计算base64文件大小(含测试文件和源码)


苟且,诗与远方

1.base64简介

Base64这个术语最初是在“MIME内容传输编码规范”中提出的。Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚。它实际上是一种“二进制到文本”的编码方法,它能够将给定的任意二进制数据转换(映射)为ASCII字符串的形式,以便在只支持文本的环境中也能够顺利地传输二进制数据。例如支持MIME的电子邮件应用,或需要在XML中存储复杂数据时。

2.在线获取文件base64

链接1: 在线获取文件base64.
链接2: 百度AI-base64音频测试文件.
文件信息

项目 Value
文件来源 百度AI官方
下载地址 http://speech-doc.gz.bcebos.com/rest-api-asr/public_audio/16k.wav
文件名 16k.wav
文件类型 wav格式音频文件
windows下文件大小 126 KB (129998 字节)
文件精确大小 129998.25字节
base64总长度 173332位
base64文件实体部分长度 173310位
base64文件尾部还有多少个’=’ 1个

3. 拆分base64文件

精确计算base64文件大小(含测试文件和源码)_第1张图片
**看上图,圈出来的data:audio/wav;base64,一共22个字符为文件头,其他文文件实体。**
.
.

4. 精确计算base64文件大小

	/**
	 * @功能  精确计算base64字符串文件大小(单位:B)
	 * @注意  base64字符串(不含data:audio/wav;base64,文件头)
	 */
	public static double base64file_size( String base64String )  {

		 	//1.获取base64字符串长度(不含data:audio/wav;base64,文件头)
			int size0 = base64String.length();

			//2.获取字符串的尾巴的最后10个字符,用于判断尾巴是否有等号,正常生成的base64文件'等号'不会超过4个
			String tail = base64String.substring(size0-10);

			//3.找到等号,把等号也去掉,(等号其实是空的意思,不能算在文件大小里面)
			int equalIndex = tail.indexOf("=");		
			if(equalIndex > 0) {
			  	size0 = size0 - (10 - equalIndex);
	        }

		 	//4.计算后得到的文件流大小,单位为字节
			return size0 -( (double)size0 / 8 ) * 2;
	}
	计算出来的结果为:129998.25字节,windows系统和大多数API129998字节

//* 以上面的测试文件16k.wav为例,其base64实体长度为173310,大小精确计算出来为129998.25字节,
//* 如果是调用百度官方语音识别API接口接收时,接收到的数据大小我们需要传入129998,不然接口会报文件大小错误。

5. 网上其他错误的计算方法


int strLen=173310;
int fileSize=strLen-(strLen/8)*2;

计算出来的结果为:129999字节

// 错误1:没有除去文件尾巴的等于号,' = ' 是为空的占位符,不计算在文件大小里面的。
// 错误2:base64长度除于8得到的是21663.75,int类型把小数去掉了,精度不够了。
.
.
.
.
.

研究不易,源码免费,欢迎各位观众老爷 右上角 留言点赞

.
.
.
.
.

你可能感兴趣的:(文件)