package com.koushikdutta.async; import android.util.Log; import com.koushikdutta.async.callback.DataCallback; import java.nio.ByteBuffer; import java.nio.charset.Charset; public class LineEmitter implements DataCallback { public interface StringCallback { void onStringAvailable(String s); } public LineEmitter() { this(null); } public LineEmitter(Charset charset) { this.charset = charset; } Charset charset; ByteBufferList data = new ByteBufferList(); StringCallback mLineCallback; public void setLineCallback(StringCallback callback) { mLineCallback = callback; } public StringCallback getLineCallback() { return mLineCallback; } @Override public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) { ByteBuffer buffer = ByteBuffer.allocate(bb.remaining()); while (bb.remaining() > 0) { byte b = bb.get(); if (b == '\n') { assert mLineCallback != null; buffer.flip(); data.add(buffer); mLineCallback.onStringAvailable(data.readString(charset)); data = new ByteBufferList(); return; } else { buffer.put(b); } } buffer.flip(); data.add(buffer); } }