package net.i2p.util;
import java.io.PipedInputStream;
/**
* Java 1.5 PipedInputStream buffers are only 1024 bytes; our I2CP messages are typically 1730 bytes,
* thus causing thread blockage before the whole message is transferred.
* We can specify buffer size in 1.6 but not in 1.5.
*
* Until we switch to Java 1.6 -
* http://javatechniques.com/blog/low-memory-deep-copy-technique-for-java-objects/
*
* Moved from InternalServerSocket.
* @since 0.8.9
*/
public class BigPipedInputStream extends PipedInputStream {
private static final boolean oneDotSix = SystemVersion.isJava6();
private static final int PIPE_SIZE = 64*1024;
private BigPipedInputStream(int size) {
super();
buffer = new byte[size];
}
/** default size 64K */
public static PipedInputStream getInstance() {
return getInstance(PIPE_SIZE);
}
public static PipedInputStream getInstance(int size) {
if (oneDotSix) {
try {
return new PipedInputStream(size);
} catch (Throwable t) {
// NoSuchMethodException or NoSuchMethodError if we somehow got the
// version detection wrong or the JVM doesn't support it
}
}
return new BigPipedInputStream(size);
}
}