Я работаю с JAR, предоставленным другой командой, это JAR шифрования, и его использование возвращает объект, который реализует Closeable
вместо OutputStream
(OutputStream
реализует Closeable
), но он все еще реализует все методы, которые необходимы, чтобы быть OutputStream
(они фактически используют OutputStream
внутри своего кода).
Closeable
Object:
public class EncryptionOutputStream implements Closeable {
public void write(int b) throws IOException {
...
}
public void write(byte b[]) throws IOException {
...
}
public void write(byte b[], int off, int len) throws IOException {
...
}
public void flush() throws IOException {
...
}
public void close() throws IOException {
...
}
}
vs
OutputStream
Объект:
public class EncryptionOutputStream extends OutputStream {
public void write(int b) throws IOException {
...
}
public void write(byte b[]) throws IOException {
...
}
public void write(byte b[], int off, int len) throws IOException {
...
}
public void flush() throws IOException {
...
}
public void close() throws IOException {
...
}
}
OutputStream
- это то, что мне нужно, и то, что требуют другие классы их собственного кода.
Код, требующий OutputStream
:
public void copy(InputStream src, OutputStream dest){
...
{
Мне было интересно, какие преимущества реализации класса более высокого уровня, как это было бы? Похоже, что реализация дочернего класса будет полезна не только в этом случае, поскольку OutputStream
так широко используются, но и во всех случаях, потому что если класс требует OutputStream
в качестве параметра, вы не можете использовать Closeable
, но если класс требует Closeable
в качестве параметра, вы можете использовать как Closeable
, так и OutputStream
.