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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • saas模式

    saas模式

    2021年10月25日
    74
  • 3DMax And PS 快捷键大全(整理)

    3DMax And PS 快捷键大全(整理)显示降级适配(开关)【O】适应透视图格点【Shift】+【Ctrl】+【A】排列【Alt】+【A】角度捕捉(开关)【A】动画模式(开关)【N】改变到后视图【K】背景锁定(开关)【Alt】+【Ctrl】+【B】前一时间单位【.】下一时间单位【,】改变到上(Top)视图【T】改变到底(Bottom)视图【B】改变到相机(Camera)视图【C】改变到前

    2022年9月29日
    0
  • QT(C++)面试总结

    QT(C++)面试总结参考博客QT信号槽机制的优缺点(1)问题:为什么Qt使用信号与槽机制而不是传统的回调函数机制进行对象间的通信呢?回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做法效率低,不灵活。(2)解决办法Qt使用信号与槽机制来解决这个问题,程序员只需要指定一个类含有哪些信号函数、哪些槽函数,Qt会处理信

    2022年6月25日
    22
  • windows系统C#(.Net)MySql数据库同步工具

    windows系统C#(.Net)MySql数据库同步工具DbSyncDbSync是一款使用.Net4.5(可以转Core)作为基础框架开发的,目前运行在windows平台的数据库同步工具。此类工具开源社区有很多,这里不是为了重复造轮子,仅仅是因为公司业务需要,不建议直接在生产环境上使用。项目介绍DbSync运行在windows平台的数据库同步工具支持一主多从同步支持同步方式设设置(结构,索引,增量,全量)支持指定表同步和忽略表同步支持同步计划,定时同步展示信息获取本人QQ:724926089,代码比较简单,有需要支持的地

    2022年6月17日
    61
  • siamfc++代码_siacoin

    siamfc++代码_siacoinSiamFC++:TowardsRobustandAccurateVisualTrackingwithTargetEstimationGuidelines摘要。视觉跟踪问题要求对给定目标进行高效的鲁棒分类和精确的状态估计。以往的方法提出了多种目标状态估计方法,但很少有方法考虑到视觉跟踪问题本身的特殊性。在仔细分析的基础上,为高性能通用目标跟踪器的设计提供了一套实用的目标状态估计指导原则。遵循这些指导原则,我们通过引入分类和目标状态估计分支(G1)、无模糊性分类评分(G2)、无先验知识跟

    2022年10月1日
    0
  • 什么是draw call_unity drawcall优化

    什么是draw call_unity drawcall优化drawcall是openGL的描绘次数(directX没怎么研究,但原理应该差不多)一个简单的openGL的绘图次序是:设置颜色→绘图方式→顶点座标→绘制→结束。每帧都会重复以上的步骤。这就是一次drawcall如果有两个model,那么需要设置颜色→绘图方式→顶点座标A→绘制→结束。设置颜色→绘图方式→顶点座标B→绘制→结束。两次drawcalls;也就是说在ope

    2022年9月18日
    0

发表回复

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

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