7

この質問を使用しました

JavaでInputStreamを文字列に変換するにはどうすればよいですか?

このコードで 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 から取得されます。文字列に変換すると、入力ストリームが変更され、使用できなくなります。これは私が得るエラーです:

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 ユーティリティを使用してみてください。私のプリセットプロジェクトでは、同じことをしました

入力ストリーム xml = connection.getInputStream();

String responseData = IOUtils.toString(xml);

Apache から IOUtils を取得できます [import org.apache.commons.io.IOUtils]

于 2012-11-21T09:06:20.317 に答える