java outputstream转为inputstream(java传递流)

本文转自 https://blog.csdn.net/lmy86263/article/details/60479350在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的。1、InputStream转化为String1.1JDK原生提供方法一:byte[]bytes=newbyt…

大家好,又见面了,我是你们的朋友全栈君。

本文转自 https://blog.csdn.net/lmy86263/article/details/60479350

在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的。

1、InputStream转化为String
1.1 JDK原生提供
方法一:
byte[] bytes = new byte[0];
bytes = new byte[inputStream.available()];
inputStream.read(bytes);
String str = new String(bytes); 
方法二:
String result = new BufferedReader(new InputStreamReader(inputStream))
        .lines().collect(Collectors.joining(System.lineSeparator())); 
方法三:
String result = new BufferedReader(new InputStreamReader(inputStream))
       .lines().parallel().collect(Collectors.joining(System.lineSeparator())); 
方法四:
Scanner s = new Scanner(inputStream).useDelimiter(“\\A”);
String str = s.hasNext() ? s.next() : “”; 
方法五:
String resource = new Scanner(inputStream).useDelimiter(“\\Z”).next();
return resource; 
方法六:
StringBuilder sb = new StringBuilder();
String line;

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {

    sb.append(line);
}
String str = sb.toString();
return str; 
方法七:
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {

    result.write(buffer, 0, length);
}
String str = result.toString(StandardCharsets.UTF_8.name());
return str; 
方法八:
BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {

    buf.write((byte) result);
    result = bis.read();
}
String str = buf.toString();
return str; 
1.2 Apache Common提供
方法九:
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, StandardCharsets.UTF_8.name());
String str = writer.toString(); 
方法十:
String str = IOUtils.toString(inputStream, “utf-8”); 
1.3 Google Guava提供
方法十一:
String str = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); 
方法十二:
String str = new String(ByteStreams.toByteArray(inputStream)); 
针对一个2MB的文件的输入流,多次执行测试如下(单位是毫秒):

方法十: 111 
方法十一: 236 
方法十二: 36 
方法一: 36 
方法二: 87 
方法三: 66 
方法四: 101 
方法五: 178 
方法六: 40 
方法七: 21 
方法八: 107 
方法九: 31

从上述结果来看,方法七和方法九更好一些,而方法五和方法十一会更差一些。

2、String转化为InputStream
2.1 JDK原生提供
InputStream is = new ByteArrayInputStream(str.getBytes());
1
2.2 Apache Common提供
InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name()); 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127484.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月16日 下午9:20
下一篇 2022年4月16日 下午9:20


相关推荐

  • vue组件之间的传值通信(vue props 对象 默认值)

    Vue通信、传值的多种方式,详解(都是干货):一、通过路由带参数进行传值①两个组件A和B,A组件通过query把orderId传递给B组件(触发事件可以是点击事件、钩子函数等)this.$router.push({path:’/conponentsB’,query:{orderId:123}})//跳转到B②在B组件中获取A组件传递过来的参数…

    2022年4月17日
    67
  • bilibili封面提取

    bilibili封面提取手机版 苹果 iOS amp 安卓 Android 分享 复制链接 到浏览器粘贴并前往 长按封面处 出现存储选项网页版 Windows amp Mac amp Linux 能够适合多平台多终端最好的办法就是网页版鲁迅 1 可以输入全地址或者 AV 号 简洁 优雅 bilibili 封面提取 bilicover magecorn com

    2026年3月26日
    2
  • 新手保姆级教程:OpenClaw 自动化操作浏览器!

    新手保姆级教程:OpenClaw 自动化操作浏览器!

    2026年3月13日
    1
  • data gateway_交通运输部监测调度

    data gateway_交通运输部监测调度对于大数据场景,计算的业务逻辑基本都在数据处理过程中完成,最后往往会持久化下来计算的结果,存储在mysql,es,hbase等适合提供查询的地方。而对于在不同数据库上的数据,需要开发接口,管理接口也是一个不小的工作量。Dataway的出现,正好解决了这个场景下的接口开发,管理等问题。只需要通过SQL,Dataql等配置就能完成一个接口的上线,大大提高了开发效率,以及管理成本。对于数据中台建设中,Dataway可以使用在统一服务层,对接各种数据源,管理数据出口。一、安装引入依赖Da…

    2025年6月1日
    6
  • 斐波那契数列python实现

    斐波那契数列python实现方法一deffbnc(n):ifnotisinstance(n,int):raiseValueError('nmustbeint')ifn==1:retu

    2022年7月6日
    21
  • 基于Scrapy分布式爬虫的开发与设计

    基于Scrapy分布式爬虫的开发与设计个人博客请访问 http blog xhzyxed cn nbsp 这个项目也是初窥 python 爬虫的一个项目 也是我的毕业设计 当时选题的时候 发现大多数人选择的都是网站类 实在是普通不过了 都是一些简单的增删查改 业务类的给人感觉一种很普通的系统设计 当时也刚好在知乎上看到了一个回答 你是如何利用计算机技术解决生活的实际问题 链接就不放了 有兴趣的可以搜索下 然后就使用了这个课题 摘要 基

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号