当前位置: 首页 > news >正文

EasyExcel使用管道流连接InputStream和OutputStream

前言

Java中的InputSteam 是程序从其中读取数据, OutputSteam是程序可以往里面写入数据。
如果我们有在项目中读取数据库的记录, 在转存成Excel文件, 再把文件转存到OSS中。

生成Excel使用的是阿里的EasyExcel 。 他支持Output的方式写出文件内容。 而我使用的OSS的Client却只支持InputSteam的方式传入内容。

这就需要我把excel的数据流从InputStream传输到OutputStream中了。 这就要用到JAVA中的管道流功能了。

用法

下面是用法示例:

	//需要注意顺序, PipedOutputStream是管道的输入端, 需要先关闭, 这样输出端就知道管道结束了,才能正常结束try (PipedOutputStream pipedOutputStream = new PipedOutputStream();PipedInputStream pipedInputStream = new PipedInputStream(pipedOutputStream)) {  ThreadUtil.execute(()->{//从数据库中读取内容, 忽略写法 List<Object>  data = ......//写入数据到output中,pipedOutputStream.write(JSON.toJSONBytes(data));//一定要调用这个方法, 不然input端不知道啥时候管道结束,就会一直堵塞等待pipedOutputStream.close();});//从input中读取数据上传到OSS中ossClient.putObject(path, pipedInputStream)} catch (Exception e) {throw new BusinessRuntimeException("接入日志文件下载异常", e);}
  1. 注意管道的关闭顺序, 需要先关闭输入端,这样读取端才能结束阻塞。
  2. 两个流需要在两个线程中,如果在一个线程中,如果先写入数据,不写入结束就不会往下继续执行, 这就失去了管道流的意义。

总结

管道流正确的用法,是用于线程之间互相通信的, 上面的例子是由于EasyExcel的API设计不太合理的, EasyExcel使用不灵活, 所以没办法才使用管道流来把EasyExcel与OSSClient关联起来。

相关文章:

EasyExcel使用管道流连接InputStream和OutputStream

前言 Java中的InputSteam 是程序从其中读取数据&#xff0c; OutputSteam是程序可以往里面写入数据。 如果我们有在项目中读取数据库的记录&#xff0c; 在转存成Excel文件, 再把文件转存到OSS中。 生成Excel使用的是阿里的EasyExcel 。 他支持Output的方式写出文件内容。 而…...

OpenWebUI连接不上Ollama模型,Ubuntu24.04

这里写自定义目录标题 问题介绍解决方法 问题介绍 操作系统 Ubuntu24.04Ollama 使用默认安装方法&#xff08;官网https://github.com/ollama/ollama&#xff09; curl -fsSL https://ollama.com/install.sh | sh 安装在本机OpenWebUI 使用默认docker安装方法&#xff08;官网…...

C#C++获取当前应用程序的安装目录和工作目录

很多时候&#xff0c;用户自己点击打开read.exe加载的时候都没有问题&#xff0c;读取ini配置文件也没有问题。但是如果应用程序是开机启动呢&#xff1f;32位Windows系统当前目录是C盘的windows\system32&#xff1b;而64位系统软件启动后默认的当前目录是&#xff1a;C:\Wind…...

Linux中vi和vim的区别详解

文章目录 Linux中vi和vim的区别详解一、引言二、vi和vim的起源与发展三、功能和特性1、语法高亮2、显示行号3、编辑模式4、可视化界面5、功能扩展6、插件支持 四、使用示例1、启动编辑器2、基本操作 五、总结 Linux中vi和vim的区别详解 一、引言 在Linux系统中&#xff0c;vi和…...

2021 年 6 月青少年软编等考 C 语言四级真题解析

目录 T1. 数字三角形问题思路分析T2. 大盗思路分析T3. 最大子矩阵思路分析T4. 小球放盒子思路分析T1. 数字三角形问题 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注…...

UE5编辑器下将RenderTarget输出为UTexture并保存

在使用UE5开发项目时&#xff0c;RenderTarget是一种非常强大的工具&#xff0c;常用于生成实时纹理效果、后处理和调试。而将RenderTarget的内容转换为UTexture并储存&#xff0c;是许多编辑器内的需求都需要的功能。 1.材质球输出至Texture 首先创建一个Actor类&#xff0c…...

【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞

目录 漏洞介绍 影响版本 环境搭建 查看版本 漏洞复现 手动复现 漏洞 poc Magento Open Source 是一个免费开源的电子商务平台&#xff0c;适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持&#xff0c;功能强大但需要更多的技术投入。Adobe…...

soul大数据面试题及参考答案

如何看待数据仓库? 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 从数据存储角度看,它整合了来自多个数据源的数据。这些数据源可能包括业务系统数据库、日志文件等各种结构化和非结构化数据。例如,在电商企业中,它会整合订…...

GLM-4-Plus初体验

引言&#xff1a;为什么高效的内容创作如此重要&#xff1f; 在当前竞争激烈的市场环境中&#xff0c;内容创作已成为品牌成功的重要支柱。无论是撰写营销文案、博客文章、社交媒体帖子&#xff0c;还是制作广告&#xff0c;优质的内容不仅能够帮助品牌吸引目标受众的注意力&a…...

基于springboot+vue的高校校园交友交流平台设计和实现

文章目录 系统功能部分实现截图 前台模块实现管理员模块实现 项目相关文件架构设计 MVC的设计模式基于B/S的架构技术栈 具体功能模块设计系统需求分析 可行性分析 系统测试为什么我&#xff1f; 关于我项目开发案例我自己的网站 源码获取&#xff1a; 系统功能 校园交友平台…...

Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步

自 2021 年发布以来&#xff0c;Nacos 2.0 在社区的支持下已走过近三年&#xff0c;期间取得了诸多成就。在高性能与易扩展性方面&#xff0c;Nacos 2.0 取得了显著进展&#xff0c;同时在易用性和安全性上也不断提升。想了解更多详细信息&#xff0c;欢迎阅读我们之前发布的回…...

【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)

HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…...

【人工智能-中级】卷积神经网络(CNN)的中阶应用:从图像分类到目标检测

文章目录 卷积神经网络(CNN)的中阶应用:从图像分类到目标检测1. 图像分类:CNN的基础应用CNN结构概述经典网络架构2. 目标检测:从分类到定位基于区域的目标检测方法单阶段目标检测方法边界框回归与NMS(Non-Maximum Suppression)3. 深度学习中的目标检测挑战与解决方案4. …...

[笔记] 编译LetMeowIn(C++汇编联编程序)过程

文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目&#xff0c;c调用汇编的程序&#xff0c;需要配置一下&#xff0c;特此记录一下 过程 下载源码 首先下载源码…...

牛客小白月赛107(A~E)

文章目录 A Cidoai的吃饭思路code B Cidoai的听歌思路code C Cidoai的植物思路code D Cidoai的猫猫思路code E Cidoai的可乐思路code 牛客小白月赛107 A Cidoai的吃饭 思路 签到题&#xff0c;按题意模拟即可 code void solve(){int n,a,b,c;cin >> n >> a &g…...

批量DWG文件转换低版本(CAD图转低版本)——c#插件实现

此插件可实现指定路径下所有dwg文件&#xff08;包含子文件夹内dwg&#xff09;一键全部转为低版本&#xff08;包含2004、2007、2018版本&#xff0c;也可定制指定版本&#xff09;。效果如下&#xff1a; &#xff08;使用方法&#xff1a;命令行输入 “netload” 加载插件&…...

安装Python库

安装Python库 一、pip安装参数--no-deps 更换下载源&#xff0c;一劳永逸 二、conda下载 一、pip安装 换源安装并且信任该下载源 pip install pipenv -i http://pypi.douban.com/simple --trusted-host pypi.douban.com参数 –no-deps ​ 有些 packages 会依赖一些其它的 p…...

智慧政务数据中台建设及运营解决方案

数据中台&#xff1a;政府数字化转型的引擎 数据中台作为政府数字化转型的核心驱动力&#xff0c;起源于美军的作战体系&#xff0c;强调高效、灵活与强大。它不仅促进了政府决策的科学性&#xff0c;还推动了政府服务的精细化与智能化。 数据中台的应用场景&#xff1a;数字…...

陪玩系统小程序源码/游戏陪玩APP系统用户端有哪些功能?游戏陪玩小程序APP源码开发

多客陪玩系统-游戏陪玩线下预约上门服务等陪玩圈子陪玩社区系统源码 陪玩系统源码&#xff0c;高质量的陪玩系统源码&#xff0c;游戏陪玩APP源码开发&#xff0c;语音陪玩源码搭建: 线上陪玩活动组局与线下家政服务系统的部署需要综合考虑技术选型、开发流程、部署流程、功能实…...

米哈游大数据面试题及参考答案

怎么判断两个链表是否相交?怎么优化? 判断两个链表是否相交可以采用多种方法。 一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...