Java之字节数组和字符串的转换问题
今天在使用字节流复制图片的时候发现一个问题,就是将字节数组转化为字符串的时候会出现长度不同的问题.这其实是个错误的操作.
public static void main(String[] args) throws IOException {
// 第一种方式(不会出现问题)
/*FileInputStream fis = new FileInputStream("D:\\美女.jpg");
FileOutputStream fos = new FileOutputStream("F:\\ccc\\美女.jpg");
int len;
while((len = fis.read()) != -1){
fos.write(len);
}
fos.close();
fis.close();*/
// 第二种方式,会出现问题
/*FileInputStream fis = new FileInputStream("D:\\美女.jpg");
byte[] arr = new byte[1024 * 6];
int len;
StringBuilder sb = new StringBuilder();
while((len = fis.read(arr)) != -1){
sb.append(new String(arr,0,len));
}
FileOutputStream fos = new FileOutputStream("F:\\ccc\\美女.jpg");
fos.write(sb.toString().getBytes());
fos.close();
fis.close();*/
// 第三种方式,解决问题
FileInputStream fis = new FileInputStream("D:\\美女.jpg");
byte[] arr = new byte[1024 * 6];
int len;
StringBuilder sb = new StringBuilder();
while((len = fis.read(arr)) != -1){
sb.append(new String(arr,0,len,"ISO-8859-1"));
}
FileOutputStream fos = new FileOutputStream("F:\\ccc\\美女.jpg");
fos.write(sb.toString().getBytes("ISO-8859-1"));
fos.close();
fis.close();
}
这个的原因是在使用字符数组读取图片将它转化为String类型的时候使用编辑器默认的编码方式进行转换,但是默认的编码方式(UTF-8或者其他)
会出现乱码(原因是多个字节转化为字符的时候码表不认识,会出现?),所以长度会增加很多.而在使用ISO-8859-1的时候它就是一个字节一个字节转化的,下面写入的
时候又指定编码,相当于是逆转,所以没有出现问题
Java之字节数组和字符串的转换问题的更多相关文章
- 【Java】字节数组转换工具类
import org.apache.commons.lang.ArrayUtils; import java.nio.charset.Charset; /** * 字节数组转换工具类 */ publi ...
- C# 进制转换 在什么情况下使用16进制,字节数组,字符串
C# 进制转换 Admin2013年9月18日 名人名言:从工作里爱了生命,就是通彻了生命最深的秘密.——纪伯伦 1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Con ...
- Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结
Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结 1. Base64编码, 1 2. Base64实现转换原理1 3. ...
- Java中字节与对象之间的转换
近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...
- JS中,JSON 和 对象互转,数组和字符串的转换?
JSON 与 J对象转化 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: 如下: var json = JSON.stringify({a: 'Hello', b ...
- 灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?
限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个 ...
- java中字节数组byte[]和字符(字符串)之间的转换
转自:http://blog.csdn.net/linlzk/article/details/6566124 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成by ...
- Java 将字节数组转化为16进制的多种方案
很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...
- golang byte转string 字节数组转字符串的问题
golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上 ...
随机推荐
- OLAP和OLTP的区别
OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果 ...
- 使用NNI的scikit-learn以及Tensorflow分析
一.NNI简介 NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包. 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机.本地 ...
- Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建
原文地址:石匠的blog truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约.truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个 ...
- /etc/profile不生效问题
http://blog.csdn.net/cuker919/article/details/54178611
- jsweb常用代码
<script> $(function (){ $.ajax({ url: 'https://test.com:8080/api/v1/users?query_not_auth=100&a ...
- UVALive 7464 Robots(模拟)
7464Robots Write a program to collect data from robots. We are given two sets of robotsX=fX1;:::;Xmg ...
- 作业要求20181204-7 Final阶段第1周/共1周 Scrum立会报告+燃尽图 02
作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2481 版本控制地址https://git.coding.net/lglr20 ...
- java程序设计第二次实验报告
北京电子科技学院(BESTI) 实验报告 课程:数据结构 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 实验日期: ...
- 20135313-exp1
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:吴子怡 学号:20135313 成绩: 指导教师:娄嘉鹏 实 ...
- 深入理解Java类加载器(1)
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...