base64编码是做啥用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了base64编码是做啥用的?相关的知识,希望对你有一定的参考价值。

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

详情参见http://baike.baidu.com/view/469071.htm百度百科追问

为什么电子邮件中会用到base64呢?

追答

因为早期的一些邮件服务器只支持文本信息,不支持二进制信息和文件。而base64编码后的结果都是ASCII低128位,也就是都是纯文本的,适合用电子邮件来传送二进制数据

参考技术A base64是一种编码,用6个二进位来表示一个字节。
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。
在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。
网关可能会把最高位置为0!
参考技术B Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。
下面简单介绍Base64算法的原理,由于代码太长就不在此贴出
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
原文的字节最后不够3个的地方用0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。
举一个例子,abc经过Base64编码以后的结果是YWJj.

发邮件的时候所写的信息自动在后台转换然后传输...

JdbcDaoSupport 是做啥用的?

【中文标题】JdbcDaoSupport 是做啥用的?【英文标题】:What is JdbcDaoSupport used for?JdbcDaoSupport 是做什么用的? 【发布时间】:2014-02-26 12:01:42 【问题描述】:

在Spring中,当我们插入数据库时​​,我们可以使用JdbcDaoSupport,也可以不使用。我的问题是,使用它有什么好处,我们应该在什么情况下使用它?

【问题讨论】:

【参考方案1】:

根据这些答案:

Proper way to inject parent class dependencies with Spring annotations spring3-annotation-JdbcDaoSupport NamedParameterJdbcDaoSupport datasource autowire?

JdbcDaoSupportNamedParameterJdbcDaoSupportSimpleJdbcDaoSupport是不必要的,是精神上的灰尘。它们不会保存任何代码行,因为您需要将数据源或模板注入其中。

我的建议 - 在每个数据源的 XML/类配置中创建模板并重用/注入它们,因为根据文档,模板是线程安全的:

配置后,JdbcTemplate 实例是线程安全的。如果您的应用程序访问多个数据库,这需要多个 DataSource,并且随后需要多个不同配置的 JdbcTemplate,您可能需要多个 JdbcTemplate 实例。

比较applicationContext.xml:

<bean id="dataSource"
      class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="$jdbc.driverClassName"/>
    <property name="url" value="$jdbc.url"/>
    <property name="username" value="$jdbc.username"/>
    <property name="password" value="$jdbc.password"/>
</bean>
<bean id="jdbcTemplate" 
      class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="dataSource"/>
</bean>

YourDaoImpl.java:

public class YourDaoImpl implements YourDao 

    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;

    @Override
    public int tableExists(String table) 
        String sql = "select count(*) from all_tables"
                + "  where table_name = :tbl";
        return jdbcTemplate.queryForObject(
                    sql, new MapSqlParameterSource("tbl", table), Integer.class);
    

JdbcDaoSupport.java:

public class YourDaoImpl extends NamedParameterJdbcDaoSupport implements YourDao 

   @Autowired
    public void setDs(DataSource dataSource) 
        setDataSource(dataSource);
    

    @Override
    public int tableExists(String table) 
        String sql = "select count(*) from all_tables"
                + "  where table_name = :tbl";
        return getNamedParameterJdbcTemplate()
               .queryForObject(
                       sql,
                       new MapSqlParameterSource("tbl", table), Integer.class);
    


更新关于JdbcTemplate/NamedParameterJdbcTemplate这里https://jira.springsource.org/browse/SPR-11478的无状态(以及线程安全)的官方声明

【讨论】:

【参考方案2】:

首先让我们指出API 将此类指定为便利类(“支持”)。我相信 JdbcDaoSupport 支持(也就是为您提供)用于 jdbc 的 DAO design 的基本实现,而模板类(参见 template pattern)将为您提供用于注入 DAO 类的 singleton。

根据我的经验,我还没有找到将我的 DAO 与 *Su​​pport 课程相结合的理由。相反,我创建了我的特定 jdbcTemplate bean 并将它们注入到我的 DAO 类中,这些类有利于组合而不是继承——通常是一种很好的面向对象的做法。

来自Spring docs,“您可以选择是否从该类继承。提供JdbcDaoSupport 类只是为了方便。”。

正如 Spring 所说,JdbcDaoSupport 只是一种便利。他们没有提到它比使用其中一种模板实现的优势。

【讨论】:

以上是关于base64编码是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

EIS终端是做啥用的

用的ajax提交的表单,js base64编码怎么用

密码学Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )

Base64编码 图片与base64编码互转

base64编码加密解密程序,输出有乱码,为啥?

将 Base64 编码图像加密为另一个有效的 Base64 编码图像