@Test public void byteAt() throws Exception { OkBuffer buffer = new OkBuffer(); buffer.writeUtf8("a"); buffer.writeUtf8(repeat('b', Segment.SIZE)); buffer.writeUtf8("c"); assertEquals('a', buffer.getByte(0)); assertEquals('a', buffer.getByte(0)); // getByte doesn't mutate! assertEquals('c', buffer.getByte(buffer.size - 1)); assertEquals('b', buffer.getByte(buffer.size - 2)); assertEquals('b', buffer.getByte(buffer.size - 3)); }
@Override public String readUtf8Line(boolean throwOnEof) throws IOException { long start = 0; long newline; while ((newline = buffer.indexOf((byte) '\n', start)) == -1) { start = buffer.size; if (source.read(buffer, Segment.SIZE) == -1) { if (throwOnEof) throw new EOFException(); return buffer.size != 0 ? readUtf8((int) buffer.size) : null; } } if (newline > 0 && buffer.getByte(newline - 1) == '\r') { // Read everything until '\r\n', then skip the '\r\n'. String result = readUtf8((int) (newline - 1)); skip(2); return result; } else { // Read everything until '\n', then skip the '\n'. String result = readUtf8((int) (newline)); skip(1); return result; } }
@Test public void getByteOfEmptyBuffer() throws Exception { OkBuffer buffer = new OkBuffer(); try { buffer.getByte(0); fail(); } catch (IndexOutOfBoundsException expected) { } }