Java Base64编码与字符串/位图转换实用类实例

3 下载量 71 浏览量 更新于2024-08-31 收藏 51KB PDF 举报
Java中的Base64编码与字符串以及Bitmap的相互转换是数据处理中常见的操作,特别是在网络通信、图像存储和传输中,它们的应用非常广泛。本文档提供了一个名为`Base64Util`的类,用于实现Base64编码与解码,以及Base64编码与Bitmap之间的转换。以下是该类的关键知识点: 1. **Base64编码原理**: - Base64是一种字符编码方式,它将3个字节(24位)的数据转换为4个Base64字符,每个字符占用6位。Base64Alphabet数组定义了64个字符,包括大小写字母、数字以及两个特殊字符`+`和`/`。 - 类中定义了几个常量,如`BASELENGTH`(128),`LOOKUPLENGTH`(64),`TWENTYFOURBITGROUP`(24),`EIGHTBIT`(8),`SIXTEENBIT`(16),`FOURBYTE`(4),`SIGN`(-128),以及用于填充的字符`PAD`。 2. **初始化过程**: - `base64Alphabet`数组通过循环初始化,将ASCII码范围内的字符映射到Base64字符集。字母A-Z、a-z、0-9被分别映射到前62个字符,而`+`和`/`作为非字母数字字符被分配特定位置。 - `lookUpBase64Alphabet`数组则是为了提高编码效率,将Base64字符映射回对应的十进制数值,便于进行查找和反向转换。 3. **编码方法**: - 类中可能包含一个私有方法用于将原始数据按照24位一组进行分组,然后逐个转换成Base64字符。这个过程涉及将每四个八位字节(`EIGHTBIT`)转换成三个十六位字节(`SIXTEENBIT`),再进一步转换成四个Base64字符(`FOURBYTE`)。 4. **字符串与Base64编码的转换**: - 通过`Base64Util`类提供的API,用户可以方便地将字符串转换为Base64编码,或者将Base64编码解码回字符串。这通常用于将敏感数据(如密码、密钥等)进行安全的传输或存储,避免直接暴露原始二进制数据。 5. **Base64与Bitmap转换**: - 在某些场景下,比如将图片数据存储为Base64字符串,可能会涉及到Bitmap与Base64的转换。这里可能需要将Bitmap对象转换成字节数组,然后调用Base64编码函数,反之亦然。这种转换在移动端应用中尤其常见,如发送图片消息或上传到云服务时。 6. **静态方法调用**: - 由于类中的方法被声明为`public final`,意味着这些方法可以直接通过类名而非对象实例进行调用,提高了代码的复用性和简洁性。 7. **编码示例**: - 文档中没有提供完整的编码或转换函数的源代码,但读者可以根据这些初始化和常量定义推测出相关的编码方法。例如,可能会有一个`encodeToBase64(String input)`或`decodeFromBase64(String base64Input)`这样的方法,分别用于编码和解码。 总结: `Base64Util`类提供了Java中Base64编码与字符串以及与Bitmap之间转换的核心工具,通过其封装的高效算法和易用接口,简化了开发者在处理二进制数据时的操作。了解并掌握这个类的工作原理,对于在实际项目中处理数据安全传输和图像存储等方面的问题至关重要。

@Override //说明下面公有函数是从父类mButtonListener继承而来,实际是重写onClick事件响应接口(类似回调)函数 public void onClick(View v) //每次按钮被操作,都会调用本重写的消息回调公有函数 { if (aaa == 2131230819) final Thread thread1 = new Thread() //新开第2个TCP通信线程用来发送-接收用户正式消息(因为安全标准不允许在主APP线程中运行延时网络操作) { @Override //说明下面公有函数是从父类mButtonListener继承而来,重写run()函数就是新创建线程程序部分 public void run() //定义新线程中运行的发送+接收客户正式消息子函数run { AtomicReference<String> serverinfo = new AtomicReference<>(); //新建结构化输入流(字符串)操作对象serverinfo,可被多个线程操作引用 serverinfo.set(new String(buf, 0, length, StandardCharsets.UTF_8)); //获取buf中字节数据,转换结构化字符串(并放在输入流对象serverinfo中) } }; thread1.start(); //*启动thread1通信子线程* String base64String = "" 将Base64编码字符串解码成Bitmap图片(对象) String outputStr = ""; if (base64String.contains("data:image/png;base64,")) { 移除前缀 voutputStr = base64String.replace("data:image/png;base64,", ""); //去除指定前缀 } byte[] decodedString = Base64.decode(base64String, Base64.DEFAULT); 显示字符个数 textdx1.setText("字符个数为:" + base64String.length() + ",已经移除前缀: "+ base64String); Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); //显示ImageView图片 tpczrq.setImageBitmap(decodedByte); }

2023-06-10 上传