首页 > 编程语言 >【InputStream】Java中InputStream和String之间的转换方法

【InputStream】Java中InputStream和String之间的转换方法

时间:2023-03-01 14:34:59浏览次数:53  
标签:Java String InputStream 转换方法 str new inputStream 方法

【转载】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
2
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());

2.2 Apache Common提供
InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name());

2.3 Google Guava提供
InputStream targetStream =
new ReaderInputStream(CharSource.wrap(str).openStream(), StandardCharsets.UTF_8.name());


原文链接:https://blog.csdn.net/lmy86263/article/details/60479350

标签:Java,String,InputStream,转换方法,str,new,inputStream,方法
From: https://www.cnblogs.com/aaacarrot/p/17168054.html

相关文章

  • JavaScript的引入方式和基础语法
    JavaScript的引入方式放在<body>的后面,</body>的前面基础语法书写语法输出语句变量 var:是全局变量,可以重复声明,会覆盖数据类型运算符其中"=="会先......
  • 国产计算机开发实践之环境搭建(Java+Mysql+Idea)
    操作系统:统信UOS/麒麟架构:aarch64(命令行uname-m查看)一、Java1.解压安装包(注:在安装包所在路径下输入命令)sudotar-zxvfjdk-8u271-linux-aarch64.tar.gz-C/usr/loca......
  • # java.lang.Integer和java.lang.Long判断的值相同
    Objectstart_index=o1.get(0);Stringstart_index_str=start_index.toString();longstart_index_s......
  • Java——四种线程创建方式
    java中创建线程有四种方式,分别是:继承Thread类,重写run方法,然后创建线程对象并调用start方法。实现Runnable接口,实现run方法,然后创建线程对象并传入Runnable实例,再调用start......
  • 关于JavaScript编译原理以及作用域的深入探讨
    前言大家好,我是CoderBin。几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状......
  • java服务OOM和CPU飙升排查
    一、JVM参数-D可以是系统默认有的参数,也可以是自己定义的参数-Dfile.encoding=UTF-8-Dmaven.test.skip=true-Dspring.profiles.active=test-Dhsf.server.port=1240......
  • flutter doctor错误:“Unable to find bundled Java version.”
    实际是找不到/Applications/AndroidStudio.app/Contents/jre/jdk执行如下命令:cd/Applications/AndroidStudio.app/Contents/ln-sjbrjrecdjreln-sContents......
  • IDEA在编译的时候报Error: java: 找不到符号符号: 变量 log lombok失效问题
    setting-->Build,Execution,Deployment 点击complier 在SharedbuildprocessVMoptions:中添加配置  -Djps.track.ap.dependencies=false ......
  • javaJDBC(finish)
    JDBC核心技术1.JDBC概述1.1数据的持久化持久化(persistence):把数据保存到可掉电式存储设备中以供之后的使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存......
  • Java面向对象部分重点笔记(二)
    Java面向对象部分重点笔记(二)接口 声明类的关键字是class,声明接口的关键字是interface 接口的作用:1.接口是一种约束2.定义一些方法,让不同的类实现3.接口中......