String与byte[]

在Java项目开发过程中,时常会遇到String与byte[]互相转换的过程,比如IO流处理,需要先将文件或字符串转为字节流,接收方需要将字节流转回字符串。那么,在相互转换的过程中,有哪些坑需要注意呢?

直接看代码

@Test

public void testStringAndByteArray() {

String s1 = "hello world";

byte[] bytes1 = s1.getBytes();

// 实际调用 bytes1.toString()

System.out.println(bytes1);

// 同样调用 bytes1.toString()

System.out.println(String.valueOf(bytes1));

// Constructs a new String by decoding the specified array of bytes

// 通过方法注释可以看到,该方法是使用字节数组构造一个新的字符串

String s2 = new String(bytes1);

System.out.println(s2);

System.out.println("s1与s2是否为同一个对象:" + (s1 == s2));

// 指定编码

byte[] bytes2 = s1.getBytes(StandardCharsets.UTF_8);

System.out.println(new String(bytes2, StandardCharsets.UTF_8));

}

运行结果如下:

[B@2f08c4b

[B@2f08c4b

hello world

s1与s2是否为同一个对象:false

hello world

Base64

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 ——百度百科

在实际项目开发过程中,遇见不少同学对Base64理解有误,有些小伙伴甚至将其用来对敏感数据加密。从上述概念字面描述可以看到,Base64就是一种编码方式,跟加密解密无关系。计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符,通过Base64编码可以将字节码编码为可见和便于传输的字符串,通常在处理文本数据的场合,表示、传输、存储一些二进制数据会用到Base64编码。

示例代码如下:

@Test

public void testStringAndBase64() {

String s1 = "hello world";

byte[] bytes1 = s1.getBytes();

System.out.println("1. byte1数组的内存地址:" + bytes1);

s1 = new String(bytes1);

System.out.println("2. 通过new String()将bytes1转回字符串:" + s1);

String s2 = Base64.encodeBase64String(bytes1);

System.out.println("3. 将byte1数组转为Base64编码字符串:" + s2);

byte[] bytes2 = Base64.encodeBase64(bytes1);

String s3 = new String(bytes2);

System.out.println("4. 通过new String()将bytes2转回字符串:" + s3);

// Base64.encodeBase64String(bytes1) 相当于 new String(Base64.encodeBase64(bytes1))

Assert.assertEquals(s2, s3);

byte[] bytes3 = Base64.decodeBase64(s3);

System.out.println("5. 将Base64字符串解码回字节数组bytes3:" + bytes3);

System.out.println("6. 通过new String()将bytes3转回字符串:" + new String(bytes3));

}

==注:以上代码使用org.apache.commons.codec.binary.Base64==

运行结果如下:

1. byte1数组的内存地址:[B@372ea2bc

2. 通过new String()将bytes1转回字符串:hello world

3. 将byte1数组转为Base64编码字符串:aGVsbG8gd29ybGQ=

4. 通过new String()将bytes2转回字符串:aGVsbG8gd29ybGQ=

5. 将Base64字符串解码回字节数组bytes3:[B@114a85c2

6. 通过new String()将bytes3转回字符串:hello world

base64 string 放不下_String、byte[]、Base64相互转换,不要再用错了相关推荐

  1. base64 string 放不下_用 Base64 编码插入 Markdown 图片

    本文写于 2017年02月20日,距今已超过 1 年,距 2020年07月25日 的最后一次修改也已超过 3 个月,部分内容可能已经过时,您可以按需阅读.如果图片无法显示或者下载链接失效,请给我反馈, ...

  2. linux jpg图片转base64,html中的图片直接使用base64编码后的字符串代替

    最近来了一个网页,里面有图片,但是却没有引用外部的图片资源,很好奇.查看代码后发现,里面的图片是使用base64编码后的字符串代替了,这个叫做Data URI scheme. Data URI sch ...

  3. base64 string类 放不下_base64编码处理数据踩过的坑

    由于业务场景中使用了base64编码进行数据的处理,最近被它折腾的不轻,今天就来看看,都是哪里出了问题. 一.参与签名时,对base64编码结果处理不当 我们知道,base64编码是由大小写字母.数字 ...

  4. android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)

    Android Bitmap到Base64字符串(Android Bitmap to Base64 String) 如何将一个大的Bitmap(用手机相机拍摄的照片)转换为Base64 String? ...

  5. csharp:Convert Image to Base64 String and Base64 String to Image

    /// <summary>/// 图像转成二进制数组/// </summary>/// <param name="imageIn"></p ...

  6. ubuntu下c++中base64编解码测试和图片编解码测试

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 字符数组的base64编解码 base64.h #include <string>std::string base64_encode(un ...

  7. OCR-PIL.Image与Base64 String的互相转换

    1. 基本环境 py2: python2.7.13 py3: python3.6.2 PIL: pip(2/3) install pillow, PIL库已不再维护,而pillow是PIL的一个分支, ...

  8. base64 能放数组里面么_手把手教你Vue解析pdf(base64)转图片【实践】

    作者:yeyan1996 转发链接:https://juejin.im/post/5bc97ab6e51d450e5d0b7dcb 公司有个业务需求,要求后台传pdf的base64编码给前端,前端显示 ...

  9. linux解码base64工具,如何解码Linux中的base64编码行?(How do I decode base64 encoded lines in linux?)...

    如何解码Linux中的base64编码行?(How do I decode base64 encoded lines in linux?) 我正在尝试读取文件并仅提取base64编码部分. 我通过使用 ...

最新文章

  1. 电子时钟单片机c语言程序,51单片机电子时钟C语言程序
  2. 关于sql注入之cookie注入
  3. 学习笔记(二十)—— 网络编程
  4. Mysql 新建用户并分配所有权限
  5. springmvc ztree 实现权限菜单的展示
  6. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
  7. java 条码识别_条码识别示例代码
  8. 数据分割-并查集+set
  9. 【Java 系列笔记】语法基础 + Spring + Spring MVC + SpringBoot + 数据结构
  10. 亚马逊自动化仓库事故,机器人失手戳破有毒喷雾,24名工人被送医院
  11. 斗战神服务器正在维护6,斗战神6月5日维护公告
  12. 超酷!极通EWEBS竟然不需微软终端服务支持
  13. 伊利诺伊理工大学舒凯招收多名全奖博士生
  14. 使用jquery easyui datetimebox 设置默认时间
  15. 蓝芽技术的原理和应用(2)(转)
  16. 【学习笔记之java报错】Description The server encountered an unexpected condition that prevented it from fulf
  17. 慢阻肺患者安全过冬指南
  18. 离散数学 传递闭包 Warshall算法
  19. 使用AlexNet训练自己的数据集
  20. 什么是软件过程?为什么要使用软件过程?如何评价一个好的软件过程?

热门文章

  1. 和dump文件什么区别_将java进程转移到“解剖台”之前,法医都干了什么?
  2. CSE 110: Principles of Programming Languages
  3. 我想和iOS大牛们交流的问题
  4. .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
  5. HTML 5适合小公司,适合在大平台上做内容
  6. 常用排序算法及其实现
  7. 开工了,为自己做的软件。先做些控件。
  8. 简单工厂(Simple Factory)模式
  9. 老式计算机显示器是什么类型的,电脑显示器面板类型有哪些,显示器什么面板好?...
  10. Eclipse的代码补全方法可以实现psvm和sout