import java.util.ArrayList; import java.util.List; public class Stream { private List _data = new ArrayList (); private int _readIndex = -1; private boolean _writeMode = false; public Stream() { } public Stream(int... saetze) { for(int satz : saetze) { _data.add(satz); } } public void reset() { _readIndex = 0; _writeMode = false; } public void rewrite() { _writeMode = true; _readIndex = -1; _data.clear(); } public boolean eof() { ensureReadMode(); return _readIndex >= _data.size(); } public int read() { Integer result = _data.get(_readIndex); _readIndex++; return result; } public void write(int satz) { ensureWriteMode(); _data.add(satz); } //-------------------- Helpers private void ensureReadMode() { if (_readIndex < 0) { throw new IllegalStateException("Stream nicht im Lesemodus!"); } } private void ensureWriteMode() { if (! _writeMode) { throw new IllegalStateException("Stream nicht im Schreibmodus!"); } } public String toString(int runLength) { StringBuilder sb = new StringBuilder(); sb.append("Stream["); for(int i=0; i<_data.size();) { sb.append(_data.get(i)); i++; if ((i % runLength) == 0) { // Run-Marke auch am Ende der Daten sb.append(" | "); } else if (i < _data.size()) { // Kein Komma am Ende sb.append(", "); } } sb.append("]"); return sb.toString(); } @Override public String toString() { return "Stream|"+_readIndex+_data.toString(); } }