java _io_图片到内存(字节数组),字节数组到文件,练习文件流和字节数组流

本文介绍了一种将图片转换为字节数组并在内存中进行操作的方法,随后将字节数组写入文件。通过使用InputStream和ByteArrayOutputStream,实现图片到字节数组的转换,再利用ByteArrayInputStream和FileOutputStream将字节数组写入指定路径的文件。
摘要由CSDN通过智能技术生成

//读取图片到字节数组(内存),然后返回写入的字节数组
//读取返回的字节数组,写入到文件

public class test{
    public static void main(String[]args)
    {
        String path="C:/Users/10853/eclipse-workspace/hell/linux学习路线.png";

    byte[] data=toByteArray(path); //图片不能直接到字节数组中,is.read()返回的是int类型的大小,new String是解码
    //需要写入字节数组(内存)再通过方法返回到字节数组里
    //图片不能直接转换成字符串
    toFile(data,"D:/d/to.txt");

}
//图片到字节数组中
public static byte[] toByteArray(String path)
{
    File f =new File(path);
    byte[] last=null;

    InputStream is =null;  //选用字节流是因为,字符流只能读纯字符文本
    ByteArrayOutputStream bos=null;

    try {
        is =new FileInputStream(f);
        bos =new ByteArrayOutputStream();

        byte[] flush=new byte[1024*10];
        int len=-1;
        try {
            while((len=is.read(flush))!=-1)
            {
                bos.write(flush,0,len);  //写出到字节数组中
                bos.flush();
            }

            return bos.toByteArray();  //不返回字节数组的话,不知道读取哪段内存

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }catch(FileNotFoundException e)
    {
        e.printStackTrace();
    }finally
    {
        try {
        if(null!=is)
        {
            is.close();
        }

        }catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    return null;

}

//字节数组写出到文件
//字节数组读取到程序中 ByteArrayInputStream
//程序写出到文件 FileOutputStream

public static void toFile(byte[] src,String path)
{
    InputStream is=null;
    OutputStream os=null;
    try
    { 
        is=new ByteArrayInputStream(src);  ///读取字节数组要用字节数组读取流,不能用FileInputStream文件读取流

        os=new FileOutputStream(path);
        byte[] flush =new byte[1024*10];
        int len=-1;
        while((len=is.read(flush))!=-1)
        {
            os.write(flush,0,len);
            os.flush();
        }

    }catch(IOException e)
    {
        e.printStackTrace();
    }finally {
        try {
            if(null!=os)
            {
                os.close();
            }
        }catch(IOException e)
        {
            e.printStackTrace();
        }
    }

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值