解决JavaMail附件名字过长导致的乱码问题

 更新时间:2020年10月10日 14:48:29   作者:hui008  
这篇文章主要介绍了解决JavaMail附件名字过长导致的乱码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题背景:

公司有个业务场景是审核客户机构通过后,给客户发送一封邮件,并将机构相关材料以附件形式一块发送,有些附件名正常,有些就乱了,如下图:

后来发现是附近名称过长导致的!

问题原因: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附件名字过长导致的乱码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • application.yml和bootstrap.yml不生效的3种解决方案

    application.yml和bootstrap.yml不生效的3种解决方案

    SpringBoot默认支持 properties(.properties) 和 YAML(.yml .yaml ) 配置文件,本文主要介绍了application.yml和bootstrap.yml不生效的3种解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • springboot植入pagerHelper的超详细教程

    springboot植入pagerHelper的超详细教程

    这篇文章主要介绍了springboot植入pagerHelper的超详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java实现文件读取和写入过程解析

    Java实现文件读取和写入过程解析

    这篇文章主要介绍了Java实现文件读取和写入过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。,需要的朋友可以参考下
    2019-10-10
  • Java实现简单GUI登录和注册界面

    Java实现简单GUI登录和注册界面

    这篇文章主要为大家详细介绍了Java实现简单GUI登录和注册界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 教你1秒将本地SpringBoot项目jar包部署到Linux环境(超详细!)

    教你1秒将本地SpringBoot项目jar包部署到Linux环境(超详细!)

    spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置,下面这篇文章主要给大家介绍了关于1秒将本地SpringBoot项目jar包部署到Linux环境的相关资料,超级详细,需要的朋友可以参考下
    2023-04-04
  • SpringBoot集成Redis—使用RedisRepositories详解

    SpringBoot集成Redis—使用RedisRepositories详解

    这篇文章主要介绍了SpringBoot集成Redis—使用RedisRepositories详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • JDK8 HashMap扩容机制分析详解

    JDK8 HashMap扩容机制分析详解

    这篇文章主要为大家介绍了JDK8 HashMap扩容机制分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java装饰者模式的示例详解

    Java装饰者模式的示例详解

    装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,提供了继承更有弹性的替代方案,也体现了开闭原则。本文将通过示例详细讲解一下装饰者模式,需要的可以参考一下
    2022-02-02
  • Spring Boot Admin监控服务如何使用

    Spring Boot Admin监控服务如何使用

    这篇文章主要介绍了Spring Boot Admin监控服务如何使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 探索分析Redis AOF日志与数据持久性

    探索分析Redis AOF日志与数据持久性

    这篇文章主要为大家介绍了探索分析Redis AOF日志与数据持久性详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论