我有一个InputStream,我传递给一个方法来做一些处理.我将在其他方法中使用相同的InputStream,但在第一次处理之后,InputStream似乎在方法内部关闭.
我如何克隆InputStream发送到关闭他的方法?有另一种解决方案吗?
编辑:关闭InputStream的方法是来自lib的外部方法.我无法控制关闭与否.
private String getContent(HttpURLConnection con) {
InputStream content = null;
String charset = "";
try {
content = con.getInputStream();
CloseShieldInputStream csContent = new CloseShieldInputStream(content);
charset = getCharset(csContent);
return IOUtils.toString(content,charset);
} catch (Exception e) {
System.out.println("Error downloading page: " + e);
return null;
}
}
private String getCharset(InputStream content) {
try {
Source parser = new Source(content);
return parser.getEncoding();
} catch (Exception e) {
System.out.println("Error determining charset: " + e);
return "UTF-8";
}
}
Run Code Online (Sandbox Code Playgroud) 我在JAX-WS中有一个Java Web服务,它从另一个方法返回一个OutputStream.我似乎无法弄清楚如何将OutputStream流式传输到返回的DataHandler,而不是创建一个临时文件,写入它,然后再将它作为InputStream重新打开.这是一个例子:
@MTOM
@WebService
class Example {
@WebMethod
public @XmlMimeType("application/octet-stream") DataHandler service() {
// Create a temporary file to write to
File fTemp = File.createTempFile("my", "tmp");
OutputStream out = new FileOutputStream(fTemp);
// Method takes an output stream and writes to it
writeToOut(out);
out.close();
// Create a data source and data handler based on that temporary file
DataSource ds = new FileDataSource(fTemp);
DataHandler dh = new DataHandler(ds);
return dh;
}
}
Run Code Online (Sandbox Code Playgroud)
主要问题是writeToOut()方法可以返回远大于计算机内存的数据.这就是为什么该方法首先使用MTOM - 流式传输数据.我似乎无法解决如何直接从OutputStream流式传输数据,我需要提供给返回的DataHandler(最终是接收StreamingDataHandler的客户端).
我已经尝试过使用PipedInputStream和PipedOutputStream,但这些似乎并不是我需要的,因为在写入PipedOutputStream之后需要返回DataHandler.
有任何想法吗?
我有一个文本文件,需要作为 SOAP 请求的一部分通过 Web 服务发送。
有人可以分享将此文本文件放入数据处理程序(在java中)的代码吗?我知道它可能涉及不确定确切代码的流。