Я создал кольцевой буфер и хотел бы создать пакет из 1000 записей. Как только в моем буфере будет 1000 записей, я хотел бы записать данные в файл и очистить буфер.Каждая партия будет новым файлом.Я попытался использовать метод reset () для сброса буфера после заполнения емкости.Я не знаю, как записать данные в виде нового файла. Пожалуйста, помогите
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
public class DataBuffer<T> {
public T[] elements = null;
public int capacity = 0;
public int writePos = 0;
public int readPos = 0;
public boolean flipMarker = false;
public DataBuffer(Class<T> type, int capacity) {
this.capacity = capacity;
@SuppressWarnings("unchecked")
final T[] elements = (T[]) Array.newInstance(type, capacity);
this.elements = elements;
}
public T get(int i) {
return elements[i];
}
public void reset() {
this.writePos = 0;
this.readPos = 0;
this.flipMarker = false;
}
public int available() {
if (!flipMarker) {
return capacity - writePos;
}
return readPos - writePos;
}
public int remainingCapacity() {
if (!flipMarker) {
return capacity - writePos;
}
return readPos - writePos;
}
public boolean put(T element) {
if (!flipMarker) {
if (writePos == capacity) {
writePos = 0;
flipMarker = true;
if (writePos < readPos) {
elements[writePos++] = element;
return true;
} else {
return false;
}
} else {
elements[writePos++] = element;
return true;
}
} else {
if (writePos < readPos) {
elements[writePos++] = element;
return true;
} else {
return false;
}
}
}
public T take() {
if (!flipMarker) {
if (readPos < writePos) {
return elements[readPos++];
} else {
return null;
}
} else {
if (readPos == capacity) {
readPos = 0;
flipMarker = false;
if (readPos < writePos) {
return elements[readPos++];
} else {
return null;
}
} else {
return elements[readPos++];
}
}
}
public List<T> getAll(){
return (List<T>) Arrays.asList(elements);
}
}
Код, который пытался пролить данные на диск, как показано ниже
private DataBuffer<Employee> processedSyslogDataBuffer = new DataBuffer<>(Employee.class, 1000);
processedSyslogDataBuffer.put(processedMessage);
if(processedSyslogDataBuffer.remainingCapacity() == 0) {
List<Employee> data = processedSyslogDataBuffer.getAll();
logger.info("Writing processed data with size :: "+data.size());
writerService.writeProcessed(data);
logger.info("resetting the buffer to accomodate next batch of records");
processedSyslogDataBuffer.reset();
}