我用过这个问题
How do I convert an InputStream to a String in Java?
使用以下代码将InputStream转换为String:
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,当我转换为String时,输入流发生变化,我不能再使用它了。这是我得到的错误:
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)
谢谢。
答案 0 :(得分: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);
答案 1 :(得分:2)
扫描仪读取直到流的末尾并关闭它。所以它将无法进一步提供。使用PushbackInputStream
作为输入流的包装,并使用unread()
方法。
答案 2 :(得分:0)
尝试使用Apache Utilities。 在我的预设项目中,我做了同样的事情
InputStream xml = connection.getInputStream();
String responseData = IOUtils.toString(xml);
你可以从Apache获取IOUtils [import org.apache.commons.io.IOUtils]