www in docker support
This commit is contained in:
parent
539a848e95
commit
c227fce036
2145 changed files with 399596 additions and 58 deletions
|
|
@ -0,0 +1,99 @@
|
|||
package org.jcodec.common;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
import org.jcodec.common.io.AutoPool;
|
||||
import org.jcodec.common.io.AutoResource;
|
||||
import org.jcodec.common.io.SeekableByteChannel;
|
||||
|
||||
public class AutoFileChannelWrapper implements SeekableByteChannel, AutoResource {
|
||||
private static final long THRESHOLD = 5000L;
|
||||
|
||||
private FileChannel ch;
|
||||
|
||||
private File file;
|
||||
|
||||
private long savedPos;
|
||||
|
||||
private long curTime;
|
||||
|
||||
private long accessTime;
|
||||
|
||||
public AutoFileChannelWrapper(File file) throws IOException {
|
||||
this.file = file;
|
||||
this.curTime = System.currentTimeMillis();
|
||||
AutoPool.getInstance().add(this);
|
||||
ensureOpen();
|
||||
}
|
||||
|
||||
private void ensureOpen() throws IOException {
|
||||
this.accessTime = this.curTime;
|
||||
if (this.ch == null || !this.ch.isOpen()) {
|
||||
this.ch = new FileInputStream(this.file).getChannel();
|
||||
this.ch.position(this.savedPos);
|
||||
}
|
||||
}
|
||||
|
||||
public int read(ByteBuffer arg0) throws IOException {
|
||||
ensureOpen();
|
||||
int r = this.ch.read(arg0);
|
||||
this.savedPos = this.ch.position();
|
||||
return r;
|
||||
}
|
||||
|
||||
public void close() throws IOException {
|
||||
if (this.ch != null && this.ch.isOpen()) {
|
||||
this.savedPos = this.ch.position();
|
||||
this.ch.close();
|
||||
this.ch = null;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isOpen() {
|
||||
return (this.ch != null && this.ch.isOpen());
|
||||
}
|
||||
|
||||
public int write(ByteBuffer arg0) throws IOException {
|
||||
ensureOpen();
|
||||
int w = this.ch.write(arg0);
|
||||
this.savedPos = this.ch.position();
|
||||
return w;
|
||||
}
|
||||
|
||||
public long position() throws IOException {
|
||||
ensureOpen();
|
||||
return this.ch.position();
|
||||
}
|
||||
|
||||
public SeekableByteChannel setPosition(long newPosition) throws IOException {
|
||||
ensureOpen();
|
||||
this.ch.position(newPosition);
|
||||
this.savedPos = newPosition;
|
||||
return this;
|
||||
}
|
||||
|
||||
public long size() throws IOException {
|
||||
ensureOpen();
|
||||
return this.ch.size();
|
||||
}
|
||||
|
||||
public SeekableByteChannel truncate(long size) throws IOException {
|
||||
ensureOpen();
|
||||
this.ch.truncate(size);
|
||||
this.savedPos = this.ch.position();
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setCurTime(long curTime) {
|
||||
this.curTime = curTime;
|
||||
if (this.ch != null && this.ch.isOpen() && curTime - this.accessTime > 5000L)
|
||||
try {
|
||||
close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue