TeeOutputStream.java
/*
* Copyright (C) 2020, Michael Dardis. and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.util.io;
import java.io.IOException;
import java.io.OutputStream;
/**
* An output stream that writes all data to two streams.
*
* @since 5.7
*/
public class TeeOutputStream extends OutputStream {
private final OutputStream stream1;
private final OutputStream stream2;
/**
* Initialize a tee output stream.
*
* @param stream1 first output stream
* @param stream2 second output stream
*/
public TeeOutputStream(OutputStream stream1, OutputStream stream2) {
this.stream1 = stream1;
this.stream2 = stream2;
}
/** {@inheritDoc} */
@Override
public void write(byte[] buf) throws IOException {
this.stream1.write(buf);
this.stream2.write(buf);
}
/** {@inheritDoc} */
@Override
public void write(byte[] buf, int off, int len) throws IOException {
this.stream1.write(buf, off, len);
this.stream2.write(buf, off, len);
}
/** {@inheritDoc} */
@Override
public void write(int b) throws IOException {
this.stream1.write(b);
this.stream2.write(b);
}
/** {@inheritDoc} */
@Override
public void flush() throws IOException {
this.stream1.flush();
this.stream2.flush();
}
/** {@inheritDoc} */
@Override
public void close() throws IOException {
try {
this.stream1.close();
} finally {
this.stream2.close();
}
}
}