1. 概况

这篇文章主要是讲怎样将InputStream转换为String。采用[weblink url="http://code.google.com/p/guava-libraries/"]Guava[/weblink]、[weblink url="http://commons.apache.org/proper/commons-io/"]Apache Commons IO [/weblink]以及普通Java代码实现

2.用Guava转换

下面就是一个Guava转换的例子—这里用的是InputSupplier功能:

@Test

public void givenUsingGuava_whenConvertingAnInputStreamToAString_thenCorrect()

throws IOException {

String originalString = randomAlphabetic(8);

InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

InputSupplier inputSupplier = new InputSupplier() {

@Override

public InputStream getInput() throws IOException {

return inputStream;

}

};

InputSupplier readerSupplier =

CharStreams.newReaderSupplier(inputSupplier, Charsets.UTF_8);

String text = CharStreams.toString(readerSupplier);

assertThat(text, equalTo(originalString));

}

来按步棸解释下: 1. 首先 — 我们将 InputStream 放入 InputSupplier —这个方法非常简单。 2. 然后 — 我们使用 InputStream 的读取参数—这样我们就可以获得一个字符流。 3. 最后 — 我们使用 Guava 的 CharStreams 工具来转化为String类型。

注意,我们最后使用了 CharStreams.toString 也会我们关闭 inputStream。

下面一个利用 Guava 转化的方法,是没用自动关闭 inputStream 的:

@Test

public void givenUsingGuavaAndJava7_whenConvertingAnInputStreamToAString_thenCorrect()

throws IOException {

String originalString = randomAlphabetic(8);

InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = null;

try (final Reader reader = new InputStreamReader(inputStream)) {

text = CharStreams.toString(reader);

}

assertThat(text, equalTo(originalString));

}

这里 CharStreams.toString 方法是没用自动关闭 inputStream 的— 这就是上面为什么我们使用java7的方法处理的原因。

3. 使用 Apache commons IO 转化

我们现在来使用用 Apache commons IO 组件来转化 这里要说名一点,相对于 Guava 来说,其他的方法都没有自动关闭 InputStream.

@Test

public void givenUsingCommonsIo_whenConvertingAnInputStreamToAString_thenCorrect()

throws IOException {

String originalString = randomAlphabetic(8);

InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name());

assertThat(text, equalTo(originalString));

}

我们也可以使用 StringWriter 来转换:

@Test

public void givenUsingCommonsIoWithCopy_whenConvertingAnInputStreamToAString_thenCorrect()

throws IOException {

String originalString = randomAlphabetic(8);

InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

StringWriter writer = new StringWriter();

String encoding = StandardCharsets.UTF_8.name();

IOUtils.copy(inputStream, writer, encoding);

assertThat(writer.toString(), equalTo(originalString));

}

直接使用Java转化

下面一个利用普通java转化的例子 — 一个 inputStream 和 StringBuilder:

@Test

public void givenUsingJava5_whenConvertingAnInputStreamToAString_thenCorrect()

throws IOException {

String originalString = randomAlphabetic(DEFAULT_SIZE);

InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

StringBuilder textBuilder = new StringBuilder();

try (Reader reader = new BufferedReader(new InputStreamReader

(inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) {

int c = 0;

while ((c = reader.read()) != -1) {

textBuilder.append((char) c);

}

}

assertEquals(textBuilder.toString(), originalString);

}

5. 使用java的 Scanner

@Test

public void givenUsingJava7_whenConvertingAnInputStreamToAString_thenCorrect()

throws IOException {

String originalString = randomAlphabetic(8);

InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = null;

try (Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8.name())) {

text = scanner.useDelimiter("\\A").next();

}

assertThat(text, equalTo(originalString));

}

注意,这里关闭 Scanner 的时候 已经关闭 inputStream 了

6. OVER

我们看到,InputStream to String 有很多不同的方法。我们需要做的就是在需要用到的时候选择一个我们方便使用的。

java scanner转string,Java InputStream to String 转化相关推荐

  1. java scanner的hasnext,Java Scanner hasNext()方法

    Java Scanner hasNext()方法 java.util.Scanner.hasNext() 方法如果此scanner有另一个标记在它的输入,则返回true.在等待要scanner的输入, ...

  2. java scanner类 构造器,Java Scanner类

    本文概述 Java的Scanner类可在java.util包中找到. Java提供了多种从键盘读取输入的方法, java.util.Scanner类就是其中之一. Java Scanner类使用默认为 ...

  3. java中scanner中nextint,Java Scanner nextInt()方法

    Java Scanner nextInt()方法 java.util.Scanner.nextInt() 方法扫描输入的下一个标记为int.形式nextInt()方法的调用和调用nextInt(rad ...

  4. java让服务器停止运行,java调用远程服务器的shell脚本以及停止的方法实现

    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手.考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端 ...

  5. java字符集编码是,java字符集与编码有关问题

    java字符集与编码问题 没想到自己的第一篇javaeye博客就是让人头痛的java字符集转码问题,下面是我个人的一些认识与网上收集的代码.在java中String在JVM里是unicode的,任何b ...

  6. java random api_API中的Scanner、Random、ArrayList、String类

    API概述 API(Application Programmming Interface)应用程序编程接口,javaAPI对于程序员来说就是一本可以检索查找的[字典],是JDK官方提供给程序开发者使用 ...

  7. Java InputStream转换为String

    Today we will learn how to convert InputStream to String in Java. While working on files, sometimes ...

  8. Java String to InputStream

    Today we will look into how to convert String to InputStream in java. Recently I wrote a post to con ...

  9. Java常用类库(Object类、String类、StringBuffer类、包装类、Math类、System类)详解

    常用类库 java.lang java.lang包下放置了Java开发中常用的类和接口,所以为简化该包下类的使用,java.lang包下的类在使用时不需要导入这些类 java.lang包下常用类有: ...

最新文章

  1. CVPR 2022 | 一种有效提升点云语义分割边界性能的学习框架
  2. java 下一代,什么是"下一代插件"对Java
  3. weblogic查看内存情况
  4. 轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点
  5. 新建django项目
  6. python处理数据的包_在Python中利用Into包整洁地进行数据迁移的教程
  7. 移除指定的session
  8. jquery获取父级元素、子级元素、兄弟元素
  9. java linux ifstat,ifstat命令
  10. 使用浏览器检查工具下载网页视频
  11. 磨刀不误砍柴工—ElasticSearch的schema详解
  12. 中心极限定理及其应用
  13. java 分割字符串(多种方法)
  14. linux基本功之df命令实战
  15. 单元测试工具及其优缺点对比
  16. 【ZJOI2017】仙人掌 题解
  17. NLMSG_ALIGN
  18. 操作系统-Linux内核系列
  19. Gym 101142F Folding
  20. 微信支付点金计划和商家小票的开发教程

热门文章

  1. mysql主键unsigned_mysql – 主键应该总是unsigned?
  2. oracle 11g 环境,Linux彻底清理Oracle 11g RAC环境方案
  3. 服务启动不了,显示 config 异常的问题排查
  4. html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
  5. LeetCode算法入门- 4Sum -day11
  6. guid主分区表损坏怎么办_抹盘提示进程失败,导致Win 10无法正常开机怎么办?...
  7. linux dev alloc name,深入理解Linux网络技术内幕-设备注册和初始化(二)
  8. linux 系统盘无法ls,linux – ls:阅读目录.:输入/输出错误
  9. 4)lsof linux命令,***Linux命令实时监测系统(top,htop,iotop,lsof,tcpdump,netstat,vmstat,iostat)...
  10. java struts 框架_java中struts 框架的实现