美文网首页
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