我需要记录从我的应用程序传递到另一个应用程序(在我的控制下)的数据流。
我想这样做来记录发送和接收的字节以进行集成测试。
我可以这样做:
void inputStreamToOutputStream(final InputStream inputStream, final OutputStream out) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
int d;
while ((d = inputStream.read()) != -1) {
out.write(d);
savedFile.write(d);
}
} catch (IOException ex) {
}
}
});
t.start();
}
但感觉应该已经有了一个库来做到这一点。我可以看到Apache IOUtils有一个copy
方法将两个流绑定在一起:
IOUtils.copy(in, out);
但这不会让我'记录'发送的字节。在我自己开始之前,有人可以建议一个像样的库吗?
答案 0 :(得分:5)
使用来自Apache Commons IO的TeeOutputStream / TeeInputStream,您可以写信给您的输出以及savedInFile
和savedOutFile
:
OutputStream teeOutput = new TeeOutputStream(out, savedOutFile);
InputStream teeInput = new TeeInputStream(input, savedInFile)
然后您可以将T恤发送到您的应用程序进行读/写。
答案 1 :(得分:0)
如上所述,您可以使用CommonsIO中的TeeOutputStream,但仍需要正确缓冲输入流。您包含的代码很接近,但您只是将读取的字节数写入两个流,不字节本身。
尝试这样的事情:
void inputStreamToOutputStream(final InputStream inputStream, final OutputStream out) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
TeeOutputStream tos = new TeeOutputStream (out,savedFile);
byte [] buf = byte[1024];
int d;
while ((d = inputStream.read(buf,0,buf.length)) != -1) {
tos.write(buf,0,d);
}
} catch (IOException ex) {
}
}
});
t.start();
}