@Override public void addAll(E[] elements) { addAll(Arrays.asList(elements)); }
private void setDataFile(File dataFile) { prepareFile(dataFile); this.dataFile = dataFile; }
RandomAccessFile randomSerializeFile = new RandomAccessFile(dataFile, "rw")) long elementsCount = internalGetSize(randomSerializeIndexFile); offset = internalOffsetOfElement(randomSerializeIndexFile, prevElement); offset = offset + internalReadElementSize(randomSerializeFile, offset) + 4; internalWriteElement(randomSerializeFile, offset, element); internalWriteOffset(randomSerializeIndexFile, elementsCount, offset);
elementsCount = internalGetSize(randomSerializeIndexFile); if(index >= 0 && index < elementsCount) long offset = internalOffsetOfElement(randomSerializeIndexFile, index); return internalReadElement(randomSerializeFile, offset);
@Test public void readWriteAddAll() { instance.addAll(values); assertEquals(values.length, (int) instance.getSize()); for(int i = 0; i < values.length; i++) { String value = instance.get(i); if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value); assertEquals("Element #" + i + " differs!", values[i], value); } int index = 0; for(String value : instance) { if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value); assertEquals("Element #" + index + " differs!", values[index], value); index++; } } }
public SerializingFileBuffer(File dataFile, File indexFile) { this.readWriteLock = new ReentrantReadWriteLock(true); setDataFile(dataFile); if(indexFile == null) { File parent = dataFile.getParentFile(); String indexName = dataFile.getName(); int dotIndex = indexName.lastIndexOf('.'); if(dotIndex > 0) { // remove extension, indexName = indexName.substring(0, dotIndex); } indexName = indexName + INDEX_EXTENSION; indexFile = new File(parent, indexName); } setIndexFile(indexFile); }
@Override public long getSize() { if(!indexFile.canRead()) { return 0; } Throwable throwable; Lock lock = readWriteLock.readLock(); lock.lock(); // FindBugs "Multithreaded correctness - Method does not release lock on all exception paths" is a false positive try(RandomAccessFile raf = new RandomAccessFile(indexFile, "r")) { return internalGetSize(raf); } catch(Throwable e) { throwable = e; } finally { lock.unlock(); } // it's a really bad idea to log while locked *sigh* if(logger.isDebugEnabled()) logger.debug("Couldn't retrieve size!", throwable); return 0; }
RandomAccessFile randomSerializeFile = new RandomAccessFile(dataFile, "rw")) long elementsCount = internalGetSize(randomSerializeIndexFile); offset = internalOffsetOfElement(randomSerializeIndexFile, prevElement); offset = offset + internalReadElementSize(randomSerializeFile, offset) + 4; internalWriteElement(randomSerializeFile, offset, element); internalWriteOffset(randomSerializeIndexFile, elementsCount, offset);
elementsCount = internalGetSize(randomSerializeIndexFile); if(index >= 0 && index < elementsCount) long offset = internalOffsetOfElement(randomSerializeIndexFile, index); return internalReadElement(randomSerializeFile, offset);
public SerializingFileBuffer(File dataFile, File indexFile) { this.readWriteLock = new ReentrantReadWriteLock(true); setDataFile(dataFile); if(indexFile == null) { File parent = dataFile.getParentFile(); String indexName = dataFile.getName(); int dotIndex = indexName.lastIndexOf('.'); if(dotIndex > 0) { // remove extension, indexName = indexName.substring(0, dotIndex); } indexName = indexName + INDEX_EXTENSION; indexFile = new File(parent, indexName); } setIndexFile(indexFile); }
@Override public long getSize() { if(!indexFile.canRead()) { return 0; } Throwable throwable; Lock lock = readWriteLock.readLock(); lock.lock(); // FindBugs "Multithreaded correctness - Method does not release lock on all exception paths" is a false positive try(RandomAccessFile raf = new RandomAccessFile(indexFile, "r")) { return internalGetSize(raf); } catch(Throwable e) { throwable = e; } finally { lock.unlock(); } // it's a really bad idea to log while locked *sigh* if(logger.isDebugEnabled()) logger.debug("Couldn't retrieve size!", throwable); return 0; }
RandomAccessFile randomSerializeFile = new RandomAccessFile(dataFile, "rw")) long elementsCount = internalGetSize(randomSerializeIndexFile); offset = internalOffsetOfElement(randomSerializeIndexFile, prevElement); offset = offset + internalReadElementSize(randomSerializeFile, offset) + 4; offset = offset + internalWriteElement(randomSerializeFile, offset, element) + 4; index++; for(long curOffset : offsets) internalWriteOffset(randomSerializeIndexFile, elementsCount + index, curOffset); index++;
@Override public void addAll(E[] elements) { addAll(Arrays.asList(elements)); }
private void setDataFile(File dataFile) { prepareFile(dataFile); this.dataFile = dataFile; }
RandomAccessFile randomSerializeFile = new RandomAccessFile(dataFile, "rw")) long elementsCount = internalGetSize(randomSerializeIndexFile); offset = internalOffsetOfElement(randomSerializeIndexFile, prevElement); offset = offset + internalReadElementSize(randomSerializeFile, offset) + 4; offset = offset + internalWriteElement(randomSerializeFile, offset, element) + 4; index++; for(long curOffset : offsets) internalWriteOffset(randomSerializeIndexFile, elementsCount + index, curOffset); index++;
private void setIndexFile(File indexFile) { prepareFile(indexFile); this.indexFile = indexFile; }
private void setIndexFile(File indexFile) { prepareFile(indexFile); this.indexFile = indexFile; }