io中的字节数组流和将图片通过字节数组流进行转换

本文介绍了Java IO中的字节数组输入流和输出流,区别在于字节数组输入流需要字节数组源,如ByteArrayInputStream,而输出流如ByteArrayOutputStream则不需要。操作过程中,字节数组流可以不关闭,由GC自动回收。此外,还展示了如何通过字节数组流将图片转换为字节数组并进行还原的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

io中的字节数组输入流和字节数组输出流的区别
字节数组输入流:
1,创建源 是一个字节数组
2,选择流 ByteArrayInputStream()
3,操作
4,可以不用关闭 gc自动回收 不需要通过os
字节数组输出流
1,不需要创建源
2,选择流 ByteArrayOutputStream()
3,操作 需注意的是在内存中想要显示它,用toByteArray()
4,可以不用关闭 gc自动回收 不需要通过os

package cn.com.io;


import java.io.*;

public class TestIo07 {
    public static void main(String[] args) {
        //字节数组输入流
        //1 创建源 字节数组
        //2 选择流 ByteArrayInputStream()
        //3 操作
        //4 可以不用关闭
        byte[] bytes = "talk is cheap show me the code".getBytes();
        InputStream is = new ByteArrayInputStream(bytes);

        byte[] flush = new byte[3];
        int tmp;
        try {
            while((tmp = is.read(flush)) != -1) {
                String str = new String(flush,0,tmp);
                System.out.println(str);
            }
        }catch(IOException e) {
            e.printStackTrace();
        }

        //字节数组输出流
        //1 没有源
        //2 选择流 不需要传参
        //3 操作
        //4 可以不用关闭
        //获取数据 toByteArray()
        OutputStream os = new ByteArrayOutputStream();
        String str = "show me the code";
        byte[] flushs = str.getBytes();
        try {
            os.write(flushs,0,flushs.length);
            os.flush();
            byte[] flag = ((ByteArrayOutputStream) os).toByteArray();
            System.out.println(flag.length+"--->"+new String(flushs,0,((ByteArrayOutputStream) os).size()));
        }catch(IOException e) {
            e.printStackTrace();
        }

    }
}

综合运用(将图片转换成字节数组,再将其还原)

package cn.com.io;
import java.io.*;
public class TestIo08 {
    public static void main(String[] args) {
        //对接流(综合运用)
        //图片转成字节数组
        //1 图片到程序 2 程序到字节数组
        //字节数组转成图片
        //1 字节数组到程序 2 程序到图片
        byte[] bytes = fileToByteArray("kt.jpg");
        System.out.println(bytes.length);
        byteArrayToFile(bytes,"kt3.jpg");
    }
    private static byte[] fileToByteArray(String src) {
        File file = new File(src);
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(file);
            os = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024*10];
            int tmp;
            while((tmp = is.read(bytes)) != -1) {
                os.write(bytes,0,tmp);
            }
            os.flush();
            return ((ByteArrayOutputStream) os).toByteArray();
        }catch(FileNotFoundException e) {
            e.printStackTrace();
        }catch(IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if (is != null) {
                    is.close();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    private static void byteArrayToFile(byte[] src,String dest) {
        InputStream is = new ByteArrayInputStream(src);
        OutputStream os = null;
        try {
            os = new FileOutputStream(dest);
            byte[] bytes = new byte[1024*10];
            int tmp;
            while((tmp = is.read(bytes)) != -1) {
                os.write(bytes,0,tmp);
            }
            os.flush();
        }catch(FileNotFoundException e) {
            e.printStackTrace();
        } catch(IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if (os != null) {
                    os.close();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值