用IO流读取并输出图片时,采用byte数组读取固定长度len,为了保证当最后一次读取字节数不足len时后面未被覆盖的字节对输出产生影响,一般采用new String(bytes,0,len).getBytes()的方法去截取字节数组的有效长度。

初学IO流的时候就是采用如下的代码进行复制文件的

     //方法二 基本字节流 一次一个字节数组(1024)System.out.println("方法二 基本字节流 一次一个字节数组(1024)");//封装数据源FileInputStream fis = new FileInputStream(src);//封装目的地FileOutputStream fos = new FileOutputStream(dest);//一次复制一个字节数组byte[] by = new byte[1024];int len = 0;while((len = fis.read(by)) != -1) {fos.write(new String(by,0,len).getBytes());}//释放资源fos.close();fis.close();

今天做课设的时候发现如此得到的新byte数组和原来不一致。

于是考虑是不是构造String和getBytes时采用系统默认编码引发了不一致的问题,遂统一编码。
依次测了 utf8 、GBK 、unicode 依然还是不一致。



不同编码还会导致getBytes()不一样长,问题找到了,应该是采用不同编码构造String的时候,对原本的字节进行了不同程度的填充或者截断,导致了原本的字节数组转成字符串并不是一个字节转成一个字符。

查阅各种编码对于一个字符的表示方法:

1、ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

2、UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

3、Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

4、GBK编码方式是中文占两个字节,英文占1个字节

发现都不是固定的一个字节对应一个字符,而ISO-8859-1就是用一个字节存储一个字符。
将编码统一成ISO-8859-1后问题就解决了。


这么麻烦 我为啥不直接for循环构造一个长度为len的新字节数组???
改了一下,果然效果和统一为ISO-8859-1一样。。。
费半天劲,以后不用String构造的办法了!

//一次复制一个字节数组byte[] by = new byte[1024];int len = 0;while((len = bis.read(by)) != -1) {out.write(Arrays.copyOf(by,len));}

Byte数组转字符串再getBytes和原来不一样相关推荐

  1. byte数组与字符串之间相互转换

    byte数组与字符串之间相互转换 字符串转数组 数组转字符串 使用String类 利用16进制字符串 字符串转数组 public static void main(String[] args) {St ...

  2. byte数组转字符串_VS2012 C# 16进制数与字符串的互换

    #编程基础##我要上头条# 一.字符串转换为16进制字节数组的步骤 1.将字符串按每两个字符拆分并插入逗号为分隔符: 2.将拆分后的字符串分离为字符串数组: 3.将字符串数组转换成字节数组并检测字符是 ...

  3. byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化

    我们先来看看byte bool  int ushort  等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...

  4. byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...

    844. 比较含退格的字符串 难度:简单 第一:简单浏览一下题目 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果.# 代表退格字符. 注意:如果对空文 ...

  5. C++ BYTE数组转字符串

    第一种情况: BYTE[0]=Ox12 BYTE[1]=0x34 BYTE[2]=0x56 最后要转换成字符串123456 另外一种情况: BYTE[0]=Ox12 BYTE[1]=0x34 BYTE ...

  6. java的byte[]数组转成字符串并且再转回byte[]数组

    byte[] bytes=new byte[] {-58,-85,55,7}; Arrays.toString(bytes) /*** 解码byte[]数组的字符串变成byte[]* @param b ...

  7. c语言byte数组转化为字符串,数组转字符串

    2019-05-07 [属猪的今年多大]属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2018-11-06 属猪的今年多大_属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2 ...

  8. 1.9 Java数组和字符串的相互转换

    字符串转换为数组 1)Java String 类中的 toCharArray() 方法将字符串转换为字符数组,具体代码如下所示. String str = "123abc"; ch ...

  9. java数组和字符串相互转换

    将字符串变成数组 java.lang包中有String.split()方法,java中通常用split()分割字符串,返回的是一个数组. 特殊,转义字符,必须加"\\"(" ...

最新文章

  1. web3j官网的完整中文翻译(java开发区块链以太坊应用的开源类库)
  2. python的延时函数delay_ESP32玩转MicroPython(三) 延时、计时 和GPIO操作
  3. php正则匹配多个,php – 将多个匹配正则表达式合并为一个并获得匹配的表达式...
  4. 【转】storm 开发系列一 第一个程序
  5. linux中使用ssh或scp时如何跳过RSA key fingerprint输入yes/no
  6. 深度| 每秒1.4亿次!再度刷新TPS记录的PolarDB如何应对双11“尖峰时刻”?
  7. 暗渡陈仓:用低消耗设备进行破解和渗透测试2.3 本章小结
  8. java和php基础部分相同或异同
  9. 数据库的根据当前id查询所有父级菜单
  10. 动物识别系统 c语言代码_C++程序员避不开虚函数的,就像C语言程序员避不开指针一样...
  11. html js禁止跳转页面,js 控制页面跳转的5种方法
  12. 信息通信类部分中文期刊投稿心得(转帖)
  13. 电视上设置禁止安装不是从Android,简单操作解决电视不让安装第三方软件方法...
  14. C++---常见秋招、春招问题汇总(持续更新)
  15. 探索设计模式之六——单例模式
  16. 直接利用Android手机破解微信加密数据库EnMicroMsg.db
  17. 视频播放JZVideoPlayer
  18. 学tlc和JAVA,#Java学习之路——第一部分总结
  19. leetcode hot100 梳理
  20. 【Linux_选择题】(D35 0604)

热门文章

  1. 打开网页时弹出迅雷下载,无法浏览网页的解决方法
  2. 递归打印1-n的两种方法
  3. DataComOLT 开局配置指导思路
  4. FISCO BCOS 控制台 console solidity合约编译工具 生成abi bin java文件
  5. python编程快速上手项目答案-python编程快速上手之第5章实践项目参考答案
  6. illustrator基本操作
  7. CentOS 安装 SS5 配置启动
  8. scrapy爬虫演示---爬取中国新闻网
  9. 【JAVA】acwing语法基础课刷题(138 / 138)完结
  10. 成为优秀UI设计师,必须了解的UI设计规范