public class ByteQueue extends Object implements Closeable
// Создание очереди
ByteQueue bq = new ByteQueue();
// Открытие файла очереди
bq.open( file );
if( bq.hasOwnerLock() ){
}else{
}
| Modifier and Type | Class and Description |
|---|---|
static class |
ByteQueue.InStream |
static class |
ByteQueue.OutStream |
| Modifier and Type | Field and Description |
|---|---|
protected List<MutableBlockHead> |
blocks |
protected MappedByteBuffer |
buff |
protected long |
buffLength |
protected long |
buffOffset |
protected FileChannel |
fchannel |
protected File |
file |
protected MutableQueueHead |
head |
protected FileLock |
ownerLock |
protected RandomAccessFile |
raFile |
| Constructor and Description |
|---|
ByteQueue() |
| Modifier and Type | Method and Description |
|---|---|
protected BlockHead |
appendBlock(byte[] data)
Добавляет блок в конец очереди, увеличивая ее
|
protected void |
checkBuffInfo()
Проверка буфера при открытии файла
|
void |
checkFreeBlocks()
Проверяет наличие свободных блоков, Последовательность (2 и более) пустых блоков объединяет в один блок
|
protected void |
checkFreeBlocks(boolean useLock)
Проверяет наличие свободных блоков,
Последовательность (2 и более) пустых блоков объединяет в один блок
|
protected void |
checkHeadSCN()
Проверяет совпадение SCN номера в заголовке.
|
void |
close() |
void |
dumpBlocks()
Выводит таблицу блоков на STDIO
|
void |
dumpBlocks(Writer out)
Выводит таблицу блоков
|
protected Pair<Integer,MutableBlockHead> |
findFreeBlock_WSEMore(int size,
int from)
Ищет свободный блок с указанным размером или больше
|
protected List<MutableBlockHead> |
getBlocksWithData()
Читает блоки и возвращает тек которые содержат данные, в последовательности увел.
|
File |
getFile()
Возвращает файл с которым происходит работа
|
protected byte[] |
getMD5Buff()
Возвращает MD5 буфера
|
boolean |
hasOwnerLock()
Очередь имеет блокировку владельца
|
boolean |
isClosed() |
protected void |
joinBlocks(List<MutableBlockHead> freeBlocks) |
protected FileLock |
lockHead() |
protected void |
logFreeBlocks()
Лог по свободным блокам
|
void |
open(File file) |
protected void |
readBlockHeaders()
Блокирует head
Читает заголовки Снимает блокировку head |
long |
readBlocks(OutputStream out)
Читает блоки с данными, отмечает их как не содержащие данные
Устанавливает блокирову head.
|
protected long |
readBlocksTo(OutputStream out)
Читает блоки с данными и записывает их в указанный поток.
|
protected void |
rereadBlockHeaders()
Перепрочитывает заголовки, предпологается что блокировка head, установлена
|
protected void |
resetHeaders() |
void |
setFile(File file)
Указывает файл с которым происходит работа
|
protected Pair<MutableBlockHead,MutableBlockHead> |
splitBlock(MutableBlockHead block,
int size)
Разделяет блок на два,
Блоки не заносятся в таблицу блоков и не сохраняются в shared mem. |
protected Pair<Integer,MutableBlockHead> |
tryInsert(byte[] data) |
protected void |
unlockHead(FileLock lock) |
BlockHead |
writeBlock(byte[] data)
Последовательность действий
Устанавливает блокировку head
Проверяет SCN
Увеличивает SCN на 1
Добавляет блок данных
в конец очереди
SCN текущий
Записывает блок и его заголовок в shared mem
Обновляет заголовок очереди в shared mem
Снимает блокировку head
|
protected void |
writeBuffInfo()
Записывает MD5 буфера в начало файла
|
protected BlockHead |
writeFirstBlock(byte[] data)
Создаеи первый блок
|
protected RandomAccessFile raFile
protected FileChannel fchannel
protected MappedByteBuffer buff
protected long buffOffset
protected long buffLength
protected FileLock ownerLock
protected MutableQueueHead head
protected List<MutableBlockHead> blocks
protected File file
public File getFile()
public void setFile(File file)
file - файл с которым происходит работаpublic boolean hasOwnerLock()
public void open(File file) throws IOException
IOExceptionpublic boolean isClosed()
public void close()
throws IOException
close in interface Closeableclose in interface AutoCloseableIOExceptionprotected void checkBuffInfo()
protected void writeBuffInfo()
protected byte[] getMD5Buff()
protected FileLock lockHead() throws IOException
IOExceptionprotected void unlockHead(FileLock lock) throws IOException
IOExceptionprotected void resetHeaders()
protected void readBlockHeaders()
protected void rereadBlockHeaders()
protected void checkHeadSCN()
protected BlockHead writeFirstBlock(byte[] data)
data - Данныеprotected BlockHead appendBlock(byte[] data)
data - Данныеprotected Pair<Integer,MutableBlockHead> tryInsert(byte[] data)
public BlockHead writeBlock(byte[] data)
data - Данные блокаprotected List<MutableBlockHead> getBlocksWithData()
protected long readBlocksTo(OutputStream out) throws IOException
out - Поток куда записываются данныеIOException - ошибка IOpublic long readBlocks(OutputStream out)
out - Куда будут записаны данныеpublic void dumpBlocks()
public void dumpBlocks(Writer out)
out - Куда вывестиprotected void logFreeBlocks()
protected Pair<MutableBlockHead,MutableBlockHead> splitBlock(MutableBlockHead block, int size)
block - Исходный блокsize - Требуемый размерprotected Pair<Integer,MutableBlockHead> findFreeBlock_WSEMore(int size, int from)
size - необходимый размерfrom - С какого начинать поиск, 0 - с началаpublic void checkFreeBlocks()
protected void checkFreeBlocks(boolean useLock)
useLock - использовать блокировкуprotected void joinBlocks(List<MutableBlockHead> freeBlocks)
Copyright © 2018. All rights reserved.