Overgram/generator/src/main/java/io/github/lonamiwebs/overgram/utils/CharacterIterator.java

62 lines
1.3 KiB
Java

package io.github.lonamiwebs.overgram.utils;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
public class CharacterIterator implements Iterator<Character>, Iterable<Character>, AutoCloseable {
private static final int BUFFER_SIZE = 4096;
private final InputStreamReader reader;
private final char[] buffer;
private int index;
private int length;
public CharacterIterator(final InputStreamReader reader) {
this.reader = reader;
buffer = new char[BUFFER_SIZE];
index = 0;
readNext();
}
@Override
public Iterator<Character> iterator() {
return this;
}
@Override
public boolean hasNext() {
if (index == BUFFER_SIZE) {
readNext();
index = 0;
}
return index < length;
}
@Override
public Character next() {
if (index == BUFFER_SIZE) {
readNext();
index = 0;
}
return buffer[index++];
}
@Override
public void close() {
try {
reader.close();
} catch (Exception ignored) {
}
}
private void readNext() {
try {
length = reader.read(buffer);
} catch (IOException ignored) {
length = -1;
}
}
}