IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> java输入流输出流的互相转换(不需要经过临时文件啦超方便) -> 正文阅读

[游戏开发]java输入流输出流的互相转换(不需要经过临时文件啦超方便)

写在前面

工作中经常会遇到,将一个或多个文件读取,然后压缩,然后再怎么怎么做。

如果每个过程都需要创建一个临时文件,可能会创建许多临时文件,那么就可以将输入输出流无缝衔接,不需要使用临时文件了。

解决方案如下

直接上代码


        File file = new File("D:\\test\\3.exe");
        BufferedInputStream bis = null;
        ByteArrayOutputStream arrayOutputStream = null;
        OutputStream bos = null;
        try {
            // 模拟读入一个文件,作为输入流
            bis = new BufferedInputStream(new FileInputStream(file), 1024);
            // 创建ByteArray输出流,所有的输出可以输出到ByteArray中,可以替代一个文件
            arrayOutputStream = new ByteArrayOutputStream();
            //用buffered包装一下,为了提高效率使用缓冲区流
            bos=new BufferedOutputStream(arrayOutputStream);

            int len=-1;
            //读取文件输入流,写入到输出流ByteArray中,输入流转成了输出流
            byte[] buf = new byte[1024];
            while ((len = bis.read(buf)) != -1) {
                bos.write(buf,0,len);
            }
            bos.flush();//清空缓冲区(非必要)
            //创建ByteArrayResource用ByteArray输出流的字节数组
            InputStreamSource inputStreamSource = new ByteArrayResource(arrayOutputStream.toByteArray());
            //至此把OutputStream已经转换成了InputStreamSource,输出流又转成了输入流
            // 又将输入流转成了输出流
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStreamSource.getInputStream());
            int bytesRead;
            byte[] buffer = new byte[4096];
            while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
                // 将文件发送到客户端
                bos.write(buffer, 0, bytesRead);
                bos.flush();
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally{
            if(bos!=null){
                bos.close();//关闭BufferedOutputStream输出流
            }
            if(arrayOutputStream!=null){
                arrayOutputStream.close();//关闭ByteArray输出流
            }
            if(bis != null){
                bis.close();
            }
        }

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:42:53  更:2022-04-04 12:44:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/26 16:25:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码