美文网首页
ByteArrayInputStream及ByteArrayOu

ByteArrayInputStream及ByteArrayOu

作者: kanaSki | 来源:发表于2019-06-24 22:12 被阅读0次

数据源从硬盘文件转为字节数组(内存中),流的关闭交由gc控制,其close方法是空方法,写不写均可。
一切对象均可转变为字节数组。
ByteArrayInputStream(byte[] bytes)

ByteArrayOutputStream()
ByteArrayOutputStream(int size) 创建一个新的字节数组输出流(具有指定大小的缓冲区容量,以字节为单位)
ByteArrayOutputStream实现将数据写入字节数组的输出流。当数据写入缓冲区时,缓冲区将自动增长,可以使用toByteArray()(创建一个新分配的字节数组)及toString()(使用平台默认字符集将字节数组转为字符串)检索数据。

toByteArray是子类特有方法,不能使用多态。

import java.io.*;

public class TestIO {
    /**
     * 图片写入字节数组
     * 字节数组输出到文件
     */
    public static void main(String[] args) {
        fileToByteArray("1.jpg");
        byteArrayToFile(byteStore,"2.jpg");
    }

    private static byte[] byteStore = new byte[1024 * 100];

    public static void byteArrayToFile(byte[] bytes, String filePath) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(filePath);
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            int len = -1;
            byte[] byteBuffer = new byte[1024];
            while ((len = (bais.read(byteBuffer))) != -1) {
                fos.write(byteBuffer, 0, len);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            if(null!=fos){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void fileToByteArray(String filePath) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filePath);
            ByteArrayOutputStream boas = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = fis.read(bytes)) != -1) {
                boas.write(bytes, 0, len);
            }
            byteStore = boas.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != fis) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

jdk1.7推出try...with resource方法
try(is;os){
...
}
这样可以不用关闭流,系统能够自动关闭流。

相关文章

网友评论

      本文标题:ByteArrayInputStream及ByteArrayOu

      本文链接:https://www.haomeiwen.com/subject/urmaqctx.html