7

我用了这个问题

如何在 Java 中将 InputStream 转换为字符串?

使用以下代码将 InputStream 转换为字符串:

public static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
} 

我的输入流来自 HttpURLConnection InputStream,当我转换为字符串时,输入流发生了变化,我无法再使用它。这是我得到的错误:

Premature end of file.' SOAP

当我将输入流转换为具有正确信息的字符串时,我能做些什么来保留输入流?

具体来说,这是更改的信息:

inCache = true (before false)
keepAliveConnections = 4 (before 5)
keepingAlive = false (before true)
poster = null (before it was PosterOutputStream object with values)

谢谢你。

4

3 回答 3

10

如果您将输入流传递到扫描仪或以任何其他方式读取其数据。您实际上正在使用它的数据,并且该流中将不再有可用数据。

您可能需要创建一个具有相同数据的新输入流并使用它来代替原始输入流。例如:

ByteArrayOutputStream into = new ByteArrayOutputStream();
byte[] buf = new byte[4096];

// inputStream is your original stream. 
for (int n; 0 < (n = inputStream.read(buf));) {
    into.write(buf, 0, n);
}
into.close();

byte[] data = into.toByteArray();

//This is your data in string format.
String stringData = new String(data, "UTF-8"); // Or whatever encoding  

//This is the new stream that you can pass it to other code and use its data.    
ByteArrayInputStream newStream = new ByteArrayInputStream(data);
于 2012-11-21T09:01:47.683 回答
2

扫描仪一直读取到流的末尾并关闭它。所以它不会进一步可用。PushbackInputStream用作输入流的包装器并使用该方法unread()

于 2012-11-16T22:34:32.793 回答
0

尝试使用 Apache 实用程序。在我的预设项目中,我做了同样的事情

InputStream xml = connection.getInputStream();

字符串响应数据 = IOUtils.toString(xml);

您可以从 Apache [import org.apache.commons.io.IOUtils] 获取 IOUtils

于 2012-11-21T09:06:20.317 回答