RPC 中 参数传递 ImputStream 流会关闭
文章目录
- 非RPC,本地方法调用时:
- RPC调用(涉及到注册中心,Feign等方式)时:
- RPC调用中,可将InputStream转为byte[] 进行参数传递
- InputStream 转 byte []
实际工作中遇到很多需要对提交的附件处理的场景。那么就涉及到控制层和业务层之间的参数传递。
非RPC,本地方法调用时:
@PostMapping("/import")public void import(@RequestParam("file") MultipartFile file) throws IOException{return importService.import(file.getInputStream());}
@Service
public class ExcelImportServiceImpl implements ExcelImportService {public void import(InputStream inputStream) {//do something}
}
这样是完全可以的。
RPC调用(涉及到注册中心,Feign等方式)时:
传递到消费者的流都是被关闭的,导致空指针等异常。
java.lang.NullPointerException: nullat com.alibaba.excel.ExcelReader.finish(ExcelReader.java:277) ~[easyexcel-2.1.6.jar!/:?]at com.alibaba.excel.ExcelReader.finalize(ExcelReader.java:287) [easyexcel-2.1.6.jar!/:?]at java.lang.System$2.invokeFinalize(System.java:1270) [?:1.8.0_191]at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:102) [?:1.8.0_191]at java.lang.ref.Finalizer.access$100(Finalizer.java:34) [?:1.8.0_191]at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:217) [?:1.8.0_191]
RPC调用中,可将InputStream转为byte[] 进行参数传递
@PostMapping("/import")public void import(@RequestParam("file") MultipartFile file) throws IOException{return importService.import(file.getBytes());}
@Service
public class ExcelImportServiceImpl implements ExcelImportService {public void import(byte[] bytes) {ByteArrayInputStream inputStream= new ByteArrayInputStream(bytes);//do something}
}
InputStream 转 byte []
public static byte[] toByteArray(InputStream input) throws IOException {ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buffer = new byte[1024*4];int n = 0;while (-1 != (n = input.read(buffer))) {output.write(buffer, 0, n);}return output.toByteArray();
}
RPC 中 参数传递 ImputStream 流会关闭相关推荐
- java中io各种流的关闭顺序
关闭该流并释放与之关联的所有资源.在关闭该流后,再调用 read().ready().mark().reset() 或 skip() 将抛出 IOException.关闭以前关闭的流无效. publi ...
- Java中使用try-with-resource优雅的关闭io流
前言 最近看到一篇关于串流的关闭方法,通过编译器自动生成关闭串流源码,行之有效. 转载自博主: Java劝退师. https://blog.csdn.net/qq_41389354/article/d ...
- 【Java】关于Java中的各种流
1 IO流 1.1 概念 input:输入(读取)-----> 流:数据(字节/字符) -----> output:输出(写入) 输入:把硬盘中的数据,读取到内存中使用 输出:把内存中的数 ...
- Java中的IO流(最详细解说)
IO流 一.File类的使用 1.常用构造器 2.路径分隔符 3.常用方法 二.IO流原理 Java IO原理 三.流的分类 1.输入流 (1)InputStream & Reader (2) ...
- java 流的概念_举例讲解Java中的Stream流概念
1.基本的输入流和输出流 流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用&qu ...
- JAVA中常用IO流类:BufferedReader和BufferedWriter读取文件操作
一.BufferedReader 字符串缓冲读取类 构造方法:bufferedWriter bf = new bufferedWriter(Writer out ); 主要方法:void write( ...
- java io流顶层_Java中的IO流(一)
一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文件到内存)流也叫读与输出(指从内存把文件写入到外部存储设备)流也叫写 注:字节流可以操 ...
- C++ 中的 IO流
目录 回顾:C语言中的输入输出 C++中的IO流 一.流是什么? 二.C语言中的IO流 三.C++中的IO流 四.C++中的文件流 回顾:C语言中的输入输出 理解C++中的IO流之前,先来回顾一下C语 ...
- io流技术java_技术文章-java中的IO流
1.File类 Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象. File f = new File(filePath); File类的基本操作包括: ...
最新文章
- 用GPU拯救世界:英伟达斯坦福呼吁玩家捐献算力,投入新冠病毒相关蛋白质分布式计算...
- java 浏览器 安全设置_IE浏览器安全设置脚本
- python使用input函数时、必须添加提示文字-python input函数
- mysql从dos界面_从DOS界面进入MYSQL数据库
- Kafka 消费者组 Rebalance 详解
- 一文读懂云上DevOps能力体系
- Oracle 索引概述
- 币安跨链桥在BSC、以太坊和IoTeX主网全面支持IOTX资产
- 程序员为什么 365 天背电脑包?这答案我服!
- 换工位解决ssh 卡住的背后
- 存档位置_胶带输送机综合保护装置安装位置 技术标准(试行)
- 信息系统管理工程师考前复习笔记一
- 微信网页授权(OAuth2.0) PHP 源码简单实现
- php vox转码,Audio Track Convert Tool(音轨转码工具)
- vscode使用注意事项
- ECharts常用通用标签整理
- 在计算机中 音乐被数字化了 被一,数字化音乐论文10篇_发表之家
- android 彩信处理
- Jiangsheng的CSDN Digest(May 15, 2006)
- SaaS正迅速成为人力资本管理数字化新常态