base64编码处理大文件
作者: / 2019-10-16 / 浏览次数:

在做项目的时候遇到需要将文件转为base64编码,并存储在文件中。

在将文件转为base64编码是会将文件读入内存,进行base64编码,输出到文件中。代码入下:

 fileinputstream stream = new fileinputstream;
 bytearrayoutputstream out = new bytearrayoutputstream;
 byte[] b = new byte[1024];
 int n;
 while ) != -1) {
 out.write;
 stream.close;
 out.close;
 system.out.println))); 

但是大文件在进行base64编码的时候就会遇到oom。

产生oom的原因:

由于3个常规字符可以转换为4个base64编码字符,所以使用3的公倍数作为缓冲区大小。

所以在对大文件进行base64编码时可以采用分段编码,进行输出。代码入下:

//使用分段上传的读取文件的方式将大文件转换为base64编码数据
 bytearrayoutputstream os1 = new bytearrayoutputstream;
 inputstream file1 = new fileinputstream;
 byte[] bytebuf = new byte[3 * 1024 * 1024];
 byte[] base64bytebuf;
 int count1; //每次从文件中读取到的有效字节数
 while ) != -1) {
 if  {//如果有效字节数不为3*1000,则说明文件已经读到尾了,不够填充满bytebuf了
 byte[] copy = arrays.copyof; //从bytebuf中截取包含有效字节数的字节段
 base64bytebuf = base64.encodebase64; //对有效字节段进行编码
 } else {
 base64bytebuf = base64.encodebase64;
 os1.write;
 os1.flush;
 file1.close;
 system.out.println);

以上代码是将编码后的数据输出至控制台。其实最好是将文件分段进行编码,分段输出,这样不管文件多大,都可以进行编码,并且不会oom。以下是将文件输出至txt文档中:

 bytearrayoutputstream os1 = new bytearrayoutputstream;
 inputstream file1 = new fileinputstream;
 byte[] bytebuf = new byte[3 * 1024 * 1024];
 byte[] base64bytebuf;
 int count1; //每次从文件中读取到的有效字节数
 file file = new file;
 while ) != -1) {
 if  {//如果有效字节数不为3*1000,则说明文件已经读到尾了,不够填充满bytebuf了
 byte[] copy = arrays.copyof; //从bytebuf中截取包含有效字节数的字节段
 base64bytebuf = base64.encodebase64; //对有效字节段进行编码
 } else {
 base64bytebuf = base64.encodebase64;
 fileutils.writebytearraytofile; // 将转换后的数据写入文件中,该方法会自动创建文件
 os1.flush;
 file1.close;

本文参考文档:

 

 

 

 

 

【某某业务】网站建设、网站设计、服务器空间租售、网站维护、网站托管、网站优化、百度推广、自媒体营销、微信公众号
如有意向---联系我们
热门栏目
热门资讯

网站建设 网站托管 成功案例 新闻动态 关于我们 联系我们 服务器空间 加盟合作 网站优化

备案号: 

公司地址:江苏省南京市玄武区玄武湖 咨询QQ:9490489 手机: 电话: