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 有很多不同的方法。我们需要做的就是在需要用到的时候选择一个我们方便使用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka php 教程,php的kafka踩坑(一)

最近项目上有一个需要用到消息队列的功能,从网上找了一些php相关的kafka使用的教程和博客,大抵都是安装php的拓展librdkafka(这里就不讲这个拓展的安装方法了,搜一下还是有很多教程的),然后直接用这个拓展进行开发,但是…

二叉树两节点距离java,求二叉树中两个节点的最远距离

问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节…

php中update()函数,update_option()函数

update_option()函数的功能是更新wp_options表中指定的一条数据。可以使用此函数代替add_option函数,尽管它不够灵活。 update_option函数会检查并判断选项是否已经存在。如果不存在,用add_option (’option_name’, ‘option_value’)添加选项。除非用户…

java解析MT940报文,swift MT报文解析处理

swift 官方资料:https://www2.swift.com/knowledgecentre/publications/us5mc_20180720/2.0?topicalec.htm#genalecswift 百科:https://baike.baidu.com/item/SWIFT/1108075prowide - swift 报文处理 开源框架:https://www.prowidesoftware.…

php怎么实现匿名评论,PHP-匿名对象与匿名类的实现过程-0905

* 匿名类:* 1. php 7.0 才支持* 2. 类似于匿名函数,就是没有名称的类* 3. 匿名类适合于一次性的创建与引用* 4. 匿名类总是与: new 配套使用类的三种访问方式实例/*** 匿名类:* 1. php 7.0 才支持* 2. 类似于匿名函数,就是没有名称的类* 3. 匿名类适合于一次性的创建与引用* 4.…

php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?

以往写cli下运行的业务或者测试代码,总是新建文件,面向过程编写代码。几次之后,cli目录下好多文件,即便勉强在一个cli测试文件中写了一个类,也是让其中的一个方法自启动,要测试别的方法,总是要修…

matlab中平均函数用法,matlab中怎样在X的指定范围内求y的平均值

有两组数据,前面一组值设为x后面一组设为y。x是坐标的变化范围,y是每个坐标下力的大小,怎样在X的指定范围内求y的平均值??比如下面x范围是从-18.19959641到-18.00003052之内的 怎样求得-18.19959641到-18.18049049这个…

php中gd为什么是乱码的,php gd库中文乱码怎么解决?

php gd库中文乱码怎么解决?,中文,乱码,字符,选项,字体php gd库中文乱码怎么解决?易采站长站,站长之家为您整理了php gd库中文乱码怎么解决?的相关内容。解决方法:1、网站整站使用UTF8编码,如果已使用GB2312…

php观察者模式和注册数模式,PHP观察者模式

观察者模式的核心是允许你的应用程序注册一个回调,当某个特定的事件发生时便会触发它。实现观察者模式,我们使用一个名为Event的类实现它,这个类有2个公共的方法。1. registerCallback() :这个方法允许你用规定的名称附加许多回调到一个事件中…

php实现飘窗,JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)

原标题:JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)JS实现网站图片飘窗效果,Java悬浮广告,郑州SEO提供以下代码,仅供参考:飘窗效果-丁光辉博客(www.dingguanghui.com)*{margin:0px;padding:0px…

php spss,spss新手入门

随着速度越来越快,计算机的功能越来越多,计算统计功能反而已经成为了计算机的一个次要部分.不过,对于我们这些从事社会学学习和研究的人来说,快速的计算和统计仍旧是我们使用计算机的主要功能,所以我们平日的工作总是离不开SPSS(Statistical Package for the SocialScience社会…

load out mysql,快速的mysql导入导出数据(load data和outfile)

当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。1 指定关键词low_priority,MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:load data low_priority infile "/home/m…

matlab rem和mod,Matlab的mod和rem

通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于:当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。这是由于这两个函数的生成机…

php sslv3握手失败,Boost Beast握手:sslv3警报握手失败错误

我正在使用Boost Beast连接到一个Web Socket服务器,但是我一直收到一个错误Resolving push-private.kucoin.com:443...Performing SSL handshake...terminate called after throwing an instance of boost::wrapexcept<:system::system_error>what(): handshake: sslv3 a…

python猜猜我是几,我在python中猜数游戏的问题

我是新手&#xff0c;所以请原谅下面的混乱…我正试图写一个数字猜谜游戏。计算机应该随机生成一个介于1到10之间的数字。用户只允许3次尝试正确猜测数字。一个用户要么猜对了&#xff0c;要么尝试完了&#xff0c;我应该让程序问用户&#xff0c;如果他们想再次玩&#xff0c;…

php pc_base,phpcms二次开发之base.php的桥梁作用_PHP教程

PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问&#xff0c;采用单一入口模式进行项目部署和访问&#xff0c;无论访问任何一个模块或者功能&#xff0c;只有一个统一的入口。入口程序是在前期处理用户请求的引导程序。它是唯一一个可以被最终用户可以直接请求运行…

oracle 表访问,向oracle导入访问表

我在将表导入到oracle时遇到问题。当我导入一个字段是例如导入&#xff1a;在访问我已经20&#xff0c;200 和进口到Oracle‘‘中访问和导入oracle作为‘12535’向oracle导入访问表在访问20’或’125.35它被声明作为数字&#xff0c;并在oracle中它已经改为文本&#xff0c;浮动…

oracle中orand使用,Postgres兼容Oracle研究——orafce调研

一、背景PostgreSQL是和Oracle最接近的企业数据库&#xff0c;包括数据类型&#xff0c;功能&#xff0c;架构和语法等几个方面。甚至大多数的日常应用的性能也不会输给Oracle。但是Oracle有些函数或者包&#xff0c;默认PostgreSQL是没有的&#xff0c;需要安装orafce包来实现…

oracle脚本审核平台,Oracle 脚本(适应各种业务需要)

Oracle 脚本(适应各种业务需要)1. 取A表的数据&#xff0c;更新B表字段update m_build bset b.district_id(select d.district_idfrombjhouse.d_district dwhereb.build_name_jqd.district_name)where exists(select 1frombjhouse.d_district dwhereb.build_name_jqd.district…

linux 文件mtime,linux 文件的atime,ctime,mtime查看與修改

查看ls -a默認顯示的是修改時間ls -c / --timestatus / --timectime顯示的是狀態修改時間(即權限修改時間)ls -u / --timeuse / --timeaccess / --timeatime表示的是文件訪問時間修改touch: 缺少了文件操作數請嘗試執行“touch --help”來獲取更多信息。[weilocalhost ~]$ touc…