今天在使用字节流复制图片的时候发现一个问题,就是将字节数组转化为字符串的时候会出现长度不同的问题.这其实是个错误的操作.

 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之字节数组和字符串的转换问题的更多相关文章

  1. 【Java】字节数组转换工具类

    import org.apache.commons.lang.ArrayUtils; import java.nio.charset.Charset; /** * 字节数组转换工具类 */ publi ...

  2. C# 进制转换 在什么情况下使用16进制,字节数组,字符串

    C# 进制转换 Admin2013年9月18日 名人名言:从工作里爱了生命,就是通彻了生命最深的秘密.——纪伯伦 1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Con ...

  3. Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结

    Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结 1. Base64编码, 1 2. Base64实现转换原理1 3.  ...

  4. Java中字节与对象之间的转换

    近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...

  5. JS中,JSON 和 对象互转,数组和字符串的转换?

    JSON 与 J对象转化 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: 如下: var json = JSON.stringify({a: 'Hello', b ...

  6. 灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?

    限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个 ...

  7. java中字节数组byte[]和字符(字符串)之间的转换

    转自:http://blog.csdn.net/linlzk/article/details/6566124 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成by ...

  8. Java 将字节数组转化为16进制的多种方案

    很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...

  9. golang byte转string 字节数组转字符串的问题

    golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上 ...

随机推荐

  1. IP地址相关知识

    IP地址基本概念                                                                                            ...

  2. NO.2:自学tensorflow之路------BP神经网络编程

    引言 在上一篇博客中,介绍了各种Python的第三方库的安装,本周将要使用Tensorflow完成第一个神经网络,BP神经网络的编写.由于之前已经介绍过了BP神经网络的内部结构,本文将直接介绍Tens ...

  3. c++ 整数和字符串的转化

    一.string转int的方式 采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了. 采用标准库中atoi函数. "; int a = ...

  4. 微信JS-SDK实现上传图片功能

    最近在项目开发中,有一个在微信WEB项目中上传图片的需求,一开始使用了传统的<input type="file">的方式去实现,但是后面发现在使用这种传统模式时会由于手 ...

  5. Android NDK 工具链的使用方法(Standalone Toolchain)

    转载:http://blog.csdn.net/smfwuxiao/article/details/6587709 首先需要确定目标机器的指令集. 如果是 x86 的机器,用 x86-4.4.3 版本 ...

  6. 利用原生Javascript实现计算器(未完待续)

    这里,将记录我升级四则运算v1.2的整个过程. 环境检测,杨说检测环境也是可以高兴到手舞足蹈的一件事. 为了实现自动化,Testing,查阅相关资料,我这里使用了node(这里为了npm).yoema ...

  7. 一个简单的加减乘除自动生成小程序升级版(JAVA)

    import java.util.Scanner; public class Suan { public static void main(String[] args) { int []b;//设置数 ...

  8. Internet History, Technology and Security (Week5.1)

    Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...

  9. MSSQL给字段添加默认值

    create table t(id int,v int ) go alter table t ADD DEFAULT 0 FOR v go

  10. 简单说明webbench的安装和使用

    简介 运行在linux上的一个性能测试工具 官网地址:http://home.tiscali.cz/~cz210552/webbench.html 如果不能打开的话,也可以直接到网盘下载:http:/ ...