文章目录

  • 非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 流会关闭相关推荐

  1. java中io各种流的关闭顺序

    关闭该流并释放与之关联的所有资源.在关闭该流后,再调用 read().ready().mark().reset() 或 skip() 将抛出 IOException.关闭以前关闭的流无效. publi ...

  2. Java中使用try-with-resource优雅的关闭io流

    前言 最近看到一篇关于串流的关闭方法,通过编译器自动生成关闭串流源码,行之有效. 转载自博主: Java劝退师. https://blog.csdn.net/qq_41389354/article/d ...

  3. 【Java】关于Java中的各种流

    1 IO流 1.1 概念 input:输入(读取)-----> 流:数据(字节/字符) -----> output:输出(写入) 输入:把硬盘中的数据,读取到内存中使用 输出:把内存中的数 ...

  4. Java中的IO流(最详细解说)

    IO流 一.File类的使用 1.常用构造器 2.路径分隔符 3.常用方法 二.IO流原理 Java IO原理 三.流的分类 1.输入流 (1)InputStream & Reader (2) ...

  5. java 流的概念_举例讲解Java中的Stream流概念

    1.基本的输入流和输出流 流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用&qu ...

  6. JAVA中常用IO流类:BufferedReader和BufferedWriter读取文件操作

    一.BufferedReader 字符串缓冲读取类 构造方法:bufferedWriter bf = new bufferedWriter(Writer out ); 主要方法:void write( ...

  7. java io流顶层_Java中的IO流(一)

    一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文件到内存)流也叫读与输出(指从内存把文件写入到外部存储设备)流也叫写 注:字节流可以操 ...

  8. C++ 中的 IO流

    目录 回顾:C语言中的输入输出 C++中的IO流 一.流是什么? 二.C语言中的IO流 三.C++中的IO流 四.C++中的文件流 回顾:C语言中的输入输出 理解C++中的IO流之前,先来回顾一下C语 ...

  9. io流技术java_技术文章-java中的IO流

    1.File类 Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象. File f = new File(filePath); File类的基本操作包括: ...

最新文章

  1. 用GPU拯救世界:英伟达斯坦福呼吁玩家捐献算力,投入新冠病毒相关蛋白质分布式计算...
  2. java 浏览器 安全设置_IE浏览器安全设置脚本
  3. python使用input函数时、必须添加提示文字-python input函数
  4. mysql从dos界面_从DOS界面进入MYSQL数据库
  5. Kafka 消费者组 Rebalance 详解
  6. 一文读懂云上DevOps能力体系
  7. Oracle 索引概述
  8. 币安跨链桥在BSC、以太坊和IoTeX主网全面支持IOTX资产
  9. 程序员为什么 365 天背电脑包?这答案我服!
  10. 换工位解决ssh 卡住的背后
  11. 存档位置_胶带输送机综合保护装置安装位置 技术标准(试行)
  12. 信息系统管理工程师考前复习笔记一
  13. 微信网页授权(OAuth2.0) PHP 源码简单实现
  14. php vox转码,Audio Track Convert Tool(音轨转码工具)
  15. vscode使用注意事项
  16. ECharts常用通用标签整理
  17. 在计算机中 音乐被数字化了 被一,数字化音乐论文10篇_发表之家
  18. android 彩信处理
  19. Jiangsheng的CSDN Digest(May 15, 2006)
  20. SaaS正迅速成为人力资本管理数字化新常态

热门文章

  1. shell 中去掉末尾换行符
  2. 手把手教你写平衡二叉树
  3. socket网络编程实现远程备份
  4. C++ Sets MultiSets
  5. 新监管形势下的数据流通合规技术解最新探究 (连载一)
  6. Java Map中那些巧妙的设计
  7. 使用MQTT与函数计算做热力图的实践
  8. 一枚戒指,一场仪式,这件事阿里巴巴坚持了15年
  9. LoRaWAN开放式实验平台
  10. stack vs heap:栈区分配内存快还是堆区分配内存快 ?