如何录制流

时间:2012-11-26 21:24:04

标签: java

我需要记录从我的应用程序传递到另一个应用程序(在我的控制下)的数据流。

我想这样做来记录发送和接收的字节以进行集成测试。

我可以这样做:

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);

但这不会让我'记录'发送的字节。在我自己开始之前,有人可以建议一个像样的库吗?

2 个答案:

答案 0 :(得分:5)

使用来自Apache Commons IO的TeeOutputStream / TeeInputStream,您可以写信给您的输出以及savedInFilesavedOutFile

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();
}