/** Create a Filebase with managed resources */ static FileBase create(String filename) { return new FileBase(filename) ; } static FileBase create(String filename, String mode) { return new FileBase(filename, mode) ; }
final public boolean isClosed() { return file.channel() == null ; }
@Override public void close() { file.close() ; }
public BlockAccessBase(String filename, int blockSize) { file = FileBase.create(filename) ; this.blockSize = blockSize ; this.label = FileOps.basename(filename) ; long filesize = file.size() ; // This is not related to used file length in mapped mode. long longBlockSize = blockSize ; numFileBlocks = filesize/longBlockSize ; // This is not related to used file length in mapped mode. seq = new AtomicLong(numFileBlocks) ; if ( numFileBlocks > Integer.MAX_VALUE ) getLog().warn(format("File size (%d) exceeds tested block number limits (%d) [%s]", filesize, blockSize, filename)) ; if ( filesize%longBlockSize != 0 ) throw new BlockException(format("File size (%d) not a multiple of blocksize (%d) [%s]", filesize, blockSize, filename)) ; if ( filesize == 0 ) isEmpty = true ; }
@Override public void sync() { file.sync() ; }
private BufferChannelFile(String filename) { file = FileBase.create(filename) ; }
@Override public String toString() { return file.getFilename() ; }
/** Create a BufferChannelFile with unmanaged file resources - use with care */ public static BufferChannelFile createUnmanaged(String filename, String mode) { try { @SuppressWarnings("resource") RandomAccessFile out = new RandomAccessFile(filename, mode) ; FileChannel channel = out.getChannel() ; FileBase base = FileBase.createUnmanged(filename, channel) ; return new BufferChannelFile(base) ; } catch (FileNotFoundException e) { IO.exception(e) ; return null ; } }
@Override public void sync() { file.sync() ; }
PlainFilePersistent(String filename) { file = FileBase.create(filename) ; //long filesize = file.out.length() ; //if ( channel.size() == 0 ) {} byteBuffer = allocateBuffer(filesize) ; }
@Override public String getFilename() { return file.getFilename() ; }
@Override public void close() { file.close() ; }
protected void force() { file.sync() ; }
/** Create a BufferChannelFile */ public static BufferChannelFile create(String filename) { FileBase base = FileBase.create(filename) ; return new BufferChannelFile(base) ; }
/** Create an FileBase without managed resources Use with case. */ static FileBase createUnmanged(String filename, FileChannel channel) { return new FileBase(filename, channel) ; }
@Override public String getLabel() { return FileOps.basename(file.getFilename()) ; }
@Override public int write(ByteBuffer buffer) { try { return file.channel().write(buffer) ; } catch (IOException e) { IO.exception(e) ; return -1 ; } }
@Override final public void close() { _close() ; file.close() ; }