Package org.eclipse.jgit.util.io
Class IsolatedOutputStream
java.lang.Object
java.io.OutputStream
org.eclipse.jgit.util.io.IsolatedOutputStream
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
OutputStream isolated from interrupts.
Wraps an OutputStream to prevent interrupts during writes from being made visible to that stream instance. This works around buggy or difficult OutputStream implementations like JSch that cannot gracefully handle an interrupt during write.
Every write (or flush) requires a context switch to another thread. Callers
should wrap this stream with BufferedOutputStream
using a suitable
buffer size to amortize the cost of context switches.
- Since:
- 4.6
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
private static void
checkedGet
(Future<Void> future) private void
void
close()
private void
private void
void
flush()
private static InterruptedIOException
private boolean
void
write
(byte[] buf, int pos, int cnt) void
write
(int ch) Methods inherited from class java.io.OutputStream
nullOutputStream, write
-
Field Details
-
dst
-
copier
-
pending
-
-
Constructor Details
-
IsolatedOutputStream
Wraps an OutputStream.- Parameters:
out
- stream to send all writes to.
-
-
Method Details
-
write
- Specified by:
write
in classOutputStream
- Throws:
IOException
-
write
- Overrides:
write
in classOutputStream
- Throws:
IOException
-
flush
- Specified by:
flush
in interfaceFlushable
- Overrides:
flush
in classOutputStream
- Throws:
IOException
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classOutputStream
- Throws:
IOException
-
tryCleanClose
private boolean tryCleanClose() -
cleanClose
- Throws:
IOException
-
dirtyClose
- Throws:
IOException
-
checkClosed
- Throws:
IOException
-
execute
- Throws:
IOException
-
checkedGet
- Throws:
IOException
-
interrupted
-