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的时候它就是一个字节一个字节转化的,下面写入的

时候又指定编码,相当于是逆转,所以没有出现问题

原文地址:https://www.cnblogs.com/wadmwz/p/9361649.html

时间: 2024-08-14 05:25:37

Java之字节数组和字符串的转换问题的相关文章

字符串到字节数组和字节数组到字符串的转换(编码和解码问题)

/* * String(byte[] bytes, String charsetName):通过指定的字符集解码字节数组 * byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码为字节数组 * * 编码:把看得懂的变成看不懂的 * String -- byte[] * * 解码:把看不懂的变成看得懂的 * byte[] -- String * * 举例:谍战片(发电报,接电报) * * 码表:小本子 *         字符    数值 * *

C# 字节数组与字符串互相转换

string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: string str = System.Text.Encoding.Default.GetString ( byteArray ); string类型转成ASCII byte[]: ("01" 转成 byte[] = new byte[]{ 0x30,0x31}) byte[] byteA

数组和字符串的转换

数组和字符串的转换 貌似数组需要变成字符串才可放入数据库中 所以, 首先,在js中进行数组和字符串的转化 数组变字符串 var a,b;     //两变量 一个数组a  一个字符串b a=new Array{0,1,2,3,4,5}; b=a.join("-");   //b="0-1-2-3-4-5"                       js里面数组变成字符串用的是 数组名.join("-"): 字符串变数组 var b="

Java按照字节来截取字符串的工具,不会出现半个汉字

原文:Java按照字节来截取字符串的工具,不会出现半个汉字 源代码下载地址:http://www.zuidaima.com/share/1550463396842496.htm Java 按照字节来截取字符串的工具,不会出现半个汉字.一个中文两个字节,一个英文字符只占 1 个字节 1. 通常我们用于前端显示的时候,防止标题过长.... /* * Copyright 2012-2013 The Haohui Network Corporation */ package com.haohui.com

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

近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOutputStream两个输出流,以及ByteArrayInputStream和ObjectInputStream两个输入流. 废话不多说了,直接上代码吧! /** * @FileName: ByteToObject.java * @Package:com.test * @Description: T

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

JSON 与 J对象转化 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: 如下: var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}' 要实现从 JSON 转换为对象,使用 JSON.parse() 方法: 如下: var obj = JSON.parse('{&q

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

限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个主题.说实话,我当时脑海中浮现出了这样一副惊心动魄的画面: 面试官老马坐在我的对面,地中海式的发型令我敬佩有加.尽管略显疲惫,但他仍然自信地向我抛出了上面这个问题.稍稍迟疑了一下,我回答说:"数组用 length,字符串用 length 跟上小括号".老马不愧是面试中的高手,一瞬间就从我的

字节数组与字符串(字符数组)的转换操作

1.默认编码方式转换: (1)string(char[])转换为byte[] byte[] byteArr = System.Text.Encoding.Default.GetBytes(char[]); byte[] byteArr = System.Text.Encoding.Default.GetBytes(string); byte[] byteArr = System.Text.Encoding.Default.GetBytes(char[], startindex, count);

java常用的数组、字符串、集合操作以及数据结构与算法基本知识

java中常用封装的数组 .字符串. 集合来操作对象,但数据结构中常用的有栈和队列   数与图以及他们之间的排序,查找. 数组声明没有分配内存空间  只有创建或者是初始化时才分配,创建时把数组中的数据类型数据所在的内存空间首地址赋值给数组名,在创建每个对象时,都会给该对象分配地址和它存储的数据 .如变量    int arr[]; int arr[]={1,2,3};  arr=new int[10] ,int arr[][]={{1,9,7},{1,2,3}}  int arr[][]=new