最近项目中用apache的httpclient中get、post、put、delete方法去请求url而这些方法请求之后响应回的数据可能很大就调用getResponseBodyAsString()方法,而响应后的数据要转换成string类型,同里也在网上看到有人需要将InputStream转换为String对象,这里我要跟大家说一下,这样的InputStream需要从文本文件(即纯文本的数据文件)中读取内容,然后将它的内容读出到一个String对象中。我下面直接给出代码,然后讲解下:
package tk.hecks.blog.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
public class StreamToString {
public static void main(String[] args) {
StreamToString sts = new StreamToString();
/*
* Get input stream of our data file. This file can be in the root of
* you application folder or inside a jar file if the program is packed
* as a jar.
*/
InputStream is = sts.getClass().getResourceAsStream("/data.txt");
/*
* Call the method to convert the stream to string
*/
System.out.println(sts.convertStreamToString(is));
}
public String convertStreamToString(InputStream is) {
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
如果大家学习过Java IO部分的API,相信大家对上面的代码应该比较容易理解。我大致的讲解下,主要讲解convertStreamToString方法,它是主要的转换方法。我们首先将InputStream转换为BufferedReader对象,该对象用于读取文本。然后我们就一行行的读取文本数据并加入到StringBuilder中(这里也可以用StringBuffer对象)。这里主要主意的地方是while的结束条件是当读取到的字符串为null。然后在最后将StringBuilder对象转换为字符串返回回去。
该代码大家可以自己运行下试试。希望能够帮助大家解决遇到的问题。
来源:Heck's Blog
地址:http://www.hecks.tk/httpclient-getresponsebodyasstream-stream-string/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!
分享到:
相关推荐
在Java编程中,有时我们可能需要将一个已经写入数据的`OutputStream`转换为`InputStream`,以便重新读取这些数据。这种情况通常出现在临时存储或处理数据时,例如在网络传输或者存储到内存中的场景。本篇文章将深入...
- 使用`BufferedReader`和`InputStreamReader`:首先,通过`InputStreamReader`将InputStream转换为字符流,然后使用`BufferedReader`逐行读取并拼接成字符串。 ```java InputStream is = ...; ...
- **使用InputStream**: 当从输入流读取字节时,可以先用`InputStream.read()`方法读取字节,然后使用`new String(bytes)`构造函数构建字符串。 在**网络编程**中,这两种类型的转换至关重要,因为网络传输的数据...
将一个String转化为InputStream,主要是将字符串转换成字节数组,然后创建一个ByteArrayInputStream。这种方法简单快捷,但会占用一定的内存空间。示例代码如下: ```java public InputStream string2...
这是因为 InputStream 对象的数据源是一次性的,读取完成后就关闭了输入流。 克隆 InputStream 对象 由于 InputStream 对象不能复制,也没有实现 Cloneable 接口,所以我们需要想出其他方法来克隆它。在本文中,...
本篇文章将深入探讨如何使用多文件输入流类来实现这一功能。 首先,我们要了解Java中的`java.io`包,这个包提供了大量的流类用于文件的读写。其中,`FileInputStream`和`FileOutputStream`是基础的单个文件输入/...
Java的输入输出流分为字节流和字符流两大类,每类又分别有输入流和输出流四种类型,即InputStream、OutputStream、Reader和Writer。下面我们将深入探讨这些概念,并通过一个简单的例子来说明其使用方法。 字节流...
为了能够更高效地处理标准输入流,通常需要将其包装为更高层次的流。例如,可以使用`InputStreamReader`将`System.in`转换为`Reader`类型,然后再进一步包装为`BufferedReader`,以便于逐行读取输入数据。 ```java ...
- **InputStream类层次**:所有输入流的父类都是`InputStream`。 - **OutputStream类层次**:所有输出流的父类都是`OutputStream`。 - **Reader类层次**:所有字符输入流的父类都是`Reader`。 - **Writer类层次**:...
FilterInputStream 类的构造方法为 FilterInputStream(InputStream),在指定的输入流之上,创建一个输入流过滤器。FilterInputStream 的常用的子类如下: 1. BufferedInputStream:缓冲区对数据的访问,以提高效率 ...
InputStreamReader可以将字节输入流转换为字符输入流,而OutputStreamWriter可以将字节输出流转换为字符输出流。 例如,使用InputStreamReader可以将字节输入流转换为字符输入流,并使用BufferedReader读取文件的一...
在Java编程中,将字符串(String)与图像(Image)相互转换是一项常见的需求,特别是在处理用户输入、数据存储或显示图形信息时。这篇博文将探讨如何在Java中实现这一过程,主要涉及`Image`对象与`String`对象之间的转换...
接下来的部分将继续讨论用于封装以字符为导向的输入流的类,如`BufferedReader`等,以及如何使用它们来提高程序的性能和灵活性。这些类通常提供了一些高级功能,比如读取整个行(`readLine`)等,从而简化了文本文件的...
在Java中,可以使用InputStreamReader和BufferedReader将InputStream转换为字符流,然后读取字符串。反之,使用OutputStreamWriter和BufferedWriter将字符串写入OutputStream。工具类可能包含这样的方法,以便在接收...
在Java编程中,将网络上的图片读取并转换为Base64字符串是一项常见的任务,尤其在Web开发中,这样的操作可以用于数据传输或者存储。Base64是一种编码方式,能够将二进制数据转化为可打印的ASCII字符,方便在网络上...
- 将InputStream转换为byte数组:可以使用ByteArrayOutputStream来实现。通过调用InputStream的read()方法,将数据读取到ByteArrayOutputStream中,然后调用其toByteArray()方法获取byte数组。 - 将byte数组转换为...
- **StringBufferInputStream**:将字符串转换为输入流,按字节读取数据。在处理文本数据时,通常不建议直接使用此流,因为存在编码问题。 - **FileInputStream**:将本地文件作为输入流使用,用于读取文件内容。 ...
本文档主要涉及Java中的IO流操作,包括输出流(OutputStream)、输入流(InputStream)、对象流(ObjectOutputStream与ObjectInputStream)、字符输出流(Writer)及字符输入流(Reader)等核心概念与使用方法。...
- `InputStreamReader` 从字节输入流读取字节并转换为字符。 **字符流的过滤器流**: - `FilterReader` 和 `FilterWriter` 提供了对字符输入和输出流的过滤和扩展功能,例如 `BufferedReader` 和 `BufferedWriter` ...
输入流用于从外部设备读取数据,而输出流用于将数据写入到外部设备。另一种分类方式是按照流的数据单位不同,分为字节流和字符流。字节流处理二进制数据,而字符流处理文本数据。最后一种分类方式是按照流的功能不同...