Byte数组转字符串再getBytes和原来不一样
用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和原来不一样相关推荐
- byte数组与字符串之间相互转换
byte数组与字符串之间相互转换 字符串转数组 数组转字符串 使用String类 利用16进制字符串 字符串转数组 public static void main(String[] args) {St ...
- byte数组转字符串_VS2012 C# 16进制数与字符串的互换
#编程基础##我要上头条# 一.字符串转换为16进制字节数组的步骤 1.将字符串按每两个字符拆分并插入逗号为分隔符: 2.将拆分后的字符串分离为字符串数组: 3.将字符串数组转换成字节数组并检测字符是 ...
- byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化
我们先来看看byte bool int ushort 等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...
- byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
844. 比较含退格的字符串 难度:简单 第一:简单浏览一下题目 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果.# 代表退格字符. 注意:如果对空文 ...
- C++ BYTE数组转字符串
第一种情况: BYTE[0]=Ox12 BYTE[1]=0x34 BYTE[2]=0x56 最后要转换成字符串123456 另外一种情况: BYTE[0]=Ox12 BYTE[1]=0x34 BYTE ...
- java的byte[]数组转成字符串并且再转回byte[]数组
byte[] bytes=new byte[] {-58,-85,55,7}; Arrays.toString(bytes) /*** 解码byte[]数组的字符串变成byte[]* @param b ...
- c语言byte数组转化为字符串,数组转字符串
2019-05-07 [属猪的今年多大]属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2018-11-06 属猪的今年多大_属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2 ...
- 1.9 Java数组和字符串的相互转换
字符串转换为数组 1)Java String 类中的 toCharArray() 方法将字符串转换为字符数组,具体代码如下所示. String str = "123abc"; ch ...
- java数组和字符串相互转换
将字符串变成数组 java.lang包中有String.split()方法,java中通常用split()分割字符串,返回的是一个数组. 特殊,转义字符,必须加"\\"(" ...
最新文章
- web3j官网的完整中文翻译(java开发区块链以太坊应用的开源类库)
- python的延时函数delay_ESP32玩转MicroPython(三) 延时、计时 和GPIO操作
- php正则匹配多个,php – 将多个匹配正则表达式合并为一个并获得匹配的表达式...
- 【转】storm 开发系列一 第一个程序
- linux中使用ssh或scp时如何跳过RSA key fingerprint输入yes/no
- 深度| 每秒1.4亿次!再度刷新TPS记录的PolarDB如何应对双11“尖峰时刻”?
- 暗渡陈仓:用低消耗设备进行破解和渗透测试2.3 本章小结
- java和php基础部分相同或异同
- 数据库的根据当前id查询所有父级菜单
- 动物识别系统 c语言代码_C++程序员避不开虚函数的,就像C语言程序员避不开指针一样...
- html js禁止跳转页面,js 控制页面跳转的5种方法
- 信息通信类部分中文期刊投稿心得(转帖)
- 电视上设置禁止安装不是从Android,简单操作解决电视不让安装第三方软件方法...
- C++---常见秋招、春招问题汇总(持续更新)
- 探索设计模式之六——单例模式
- 直接利用Android手机破解微信加密数据库EnMicroMsg.db
- 视频播放JZVideoPlayer
- 学tlc和JAVA,#Java学习之路——第一部分总结
- leetcode hot100 梳理
- 【Linux_选择题】(D35 0604)