java scanner转string,Java InputStream to String 转化
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 转化相关推荐
- java scanner的hasnext,Java Scanner hasNext()方法
Java Scanner hasNext()方法 java.util.Scanner.hasNext() 方法如果此scanner有另一个标记在它的输入,则返回true.在等待要scanner的输入, ...
- java scanner类 构造器,Java Scanner类
本文概述 Java的Scanner类可在java.util包中找到. Java提供了多种从键盘读取输入的方法, java.util.Scanner类就是其中之一. Java Scanner类使用默认为 ...
- java中scanner中nextint,Java Scanner nextInt()方法
Java Scanner nextInt()方法 java.util.Scanner.nextInt() 方法扫描输入的下一个标记为int.形式nextInt()方法的调用和调用nextInt(rad ...
- java让服务器停止运行,java调用远程服务器的shell脚本以及停止的方法实现
最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手.考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端 ...
- java字符集编码是,java字符集与编码有关问题
java字符集与编码问题 没想到自己的第一篇javaeye博客就是让人头痛的java字符集转码问题,下面是我个人的一些认识与网上收集的代码.在java中String在JVM里是unicode的,任何b ...
- java random api_API中的Scanner、Random、ArrayList、String类
API概述 API(Application Programmming Interface)应用程序编程接口,javaAPI对于程序员来说就是一本可以检索查找的[字典],是JDK官方提供给程序开发者使用 ...
- Java InputStream转换为String
Today we will learn how to convert InputStream to String in Java. While working on files, sometimes ...
- Java String to InputStream
Today we will look into how to convert String to InputStream in java. Recently I wrote a post to con ...
- Java常用类库(Object类、String类、StringBuffer类、包装类、Math类、System类)详解
常用类库 java.lang java.lang包下放置了Java开发中常用的类和接口,所以为简化该包下类的使用,java.lang包下的类在使用时不需要导入这些类 java.lang包下常用类有: ...
最新文章
- CVPR 2022 | 一种有效提升点云语义分割边界性能的学习框架
- java 下一代,什么是"下一代插件"对Java
- weblogic查看内存情况
- 轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点
- 新建django项目
- python处理数据的包_在Python中利用Into包整洁地进行数据迁移的教程
- 移除指定的session
- jquery获取父级元素、子级元素、兄弟元素
- java linux ifstat,ifstat命令
- 使用浏览器检查工具下载网页视频
- 磨刀不误砍柴工—ElasticSearch的schema详解
- 中心极限定理及其应用
- java 分割字符串(多种方法)
- linux基本功之df命令实战
- 单元测试工具及其优缺点对比
- 【ZJOI2017】仙人掌 题解
- NLMSG_ALIGN
- 操作系统-Linux内核系列
- Gym 101142F Folding
- 微信支付点金计划和商家小票的开发教程
热门文章
- mysql主键unsigned_mysql – 主键应该总是unsigned?
- oracle 11g 环境,Linux彻底清理Oracle 11g RAC环境方案
- 服务启动不了,显示 config 异常的问题排查
- html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
- LeetCode算法入门- 4Sum -day11
- guid主分区表损坏怎么办_抹盘提示进程失败,导致Win 10无法正常开机怎么办?...
- linux dev alloc name,深入理解Linux网络技术内幕-设备注册和初始化(二)
- linux 系统盘无法ls,linux – ls:阅读目录.:输入/输出错误
- 4)lsof linux命令,***Linux命令实时监测系统(top,htop,iotop,lsof,tcpdump,netstat,vmstat,iostat)...
- java struts 框架_java中struts 框架的实现