时间:2021-05-19
问题背景:
公司有个业务场景是审核客户机构通过后,给客户发送一封邮件,并将机构相关材料以附件形式一块发送,有些附件名正常,有些就乱了,如下图:
后来发现是附近名称过长导致的!
问题原因:java mail中设置附件名称会采用 base64格式进行编码,如果附件名称过长会被进行切割,将剩下字符抹去,所以导致不知道这是什么格式的文件。
注:虽然将文件格式被改变了,但是若强制转换成原格式(右键->另存为->xxx.pdf) 仍然可以进行打开,文件内容也并非改变(这是测试后的结果)
解决方案:
由于是spring boot 项目,只需要在main方法中加入以下 代码即可(大概意思就是,取消切割,默认是true)
System.setProperty("mail.mime.splitlongparameters", "false");
补充知识:LinkedList的增删一定比ArrayList快吗?
1.背景
众所周知,arrayList底层是通过数组实现,当其超过容量时,会进行1.5的扩容,将原数组数据迁移至新数组中。
而LinkedList底层为双向链表,其增加操作直接在尾部新增一个node节点即可。
那么,在插入相同的数据情况下(集合默认长度都是0),到底谁更快呢?
2.案例
public static void main(String[] args) { List<String> array = new ArrayList<>(); List<String> linked = new LinkedList<>(); long start = System.currentTimeMillis(); int index = 10000000; for (int i = 0; i < index; i++) { array.add("" + i); } long end = System.currentTimeMillis(); System.out.println("ArrayList用时:" + (end - start) / 1000 + "s"); start = System.currentTimeMillis(); for (int i = 0; i < index; i++) { linked.add("" + i); } end = System.currentTimeMillis(); System.out.println("LinkedList用时:" + (end - start) / 1000 + "s"); }3.结果
4.分析
此处我是这么理解的,arrayList是通过下标直接去放入数据,而linked需要创建一个Node然后 将数据放入,再与前节点建立链接。
然后不需要扩容的情况下,明显arrayList快,那么扩容呢?其实我们测试用的是尾部插入。
也就是arrayList扩容后直接将前面的数据放入对应下标,之后的在继续按照下标插入就行,也就是有序在尾部插入。
如果数据量大通过尾部插入的话(不指定下标,默认就是在尾部插入),linked的插入需要建立对应的对象,绑定关系,
而array则直接放置,其扩容也是按照原来顺序放入新数组,速度比较链表 要更快。
我还专门做了一个按照头部插入的方式,发现这时明显链表高于数组的速度。
5.总结(个人观点)
数组比之链表:
在需要扩容的前提下
插入效率随着下标的递增,其性能逐渐由链表偏向数组。
下标靠中间(链表的查询惨不忍睹),所以其中间效率也是极低的
而数组插入的下标靠前,会涉及其下标之后元素移位操作,所以index越靠前插入,效率越低
6.插入性能
以上这篇解决JavaMail附件名字过长导致的乱码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
如何快速解决win7下Chrome浏览器下载文件名乱码问题,我们知道有些论坛附件在Chrome浏览器中下载,文件名称会显示为乱码。这是因为(页面内容webcon
gvim的菜单乱码问题的解决方法:(乱码是由于系统内码不兼容导致,系统内码包括gb2312gb18030utf-8utf-16[unicode]等)生成文件~/
尝试了各种防止中文乱码的方式,但是还是乱码;最后还是细节问题导致;解决方式:以及俩种方式是百度的,我的问题不是这俩块1.在requestMapping中添加pr
怎样解决MySQL5016的乱码问题?本文给出了解决方法:问:怎样解决MySQL5.0.16的乱码问题?答:MySQL5.0.16的乱码问题可以用下面的方法解决
复杂邮件发送问题关于JavaMail如何发送邮件这里就不赘述了,网上有很多例子。其中最复杂的邮件发送莫过于html邮件包含内嵌图片以及附件,最近项目中的这项功能