private static void consumeBytes(TypeExtractor typeExtractor, Pipe output, byte[] data, int offset, int length) { int fieldIdx = 0; byte prevB = 0; int quoteCount = 0; int i = offset; int fieldStart = offset; int lineStop = length+offset; while (i<lineStop) { if (',' == data[i] && '\\'!=prevB && (quoteCount&1)==0) { //send the new field as a message up to this point. consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, i-fieldStart); fieldStart = i+1; } prevB = data[i++]; quoteCount += quoter[0xFF&prevB]; } //last field at the end of length consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, lineStop-fieldStart); }
@Override public void shutdown() { endOfData(outputRing); }
public void run() { //read from the byte stream which is already chunked by lines readData(this, inputRing, outputRing); }
lineSplitter.shutdown(); FieldSplitterStage fieldSplitter = new FieldSplitterStage(gm, linesRing, fieldsRing); fieldSplitter.startup(); fieldSplitter.run(); fieldSplitter.shutdown();
byte[] data = byteBackingArray(meta, inputRing); beginningOfLine(outputRing); consumeBytes(stage.typeExtractor, outputRing, data, pos, len); } else { consumeBytes(stage.typeExtractor, outputRing, data, pos, len1, 0, len - len1); endOfLine(outputRing);
FieldSplitterStage fieldSplitter = new FieldSplitterStage(gm, linesRing, fieldsRing);
if (',' == data[i] && '\\'!=prevB) { consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, i-fieldStart); fieldStart = i+1; consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, i-fieldStart); } else { consumeField(fieldIdx++, typeExtractor, output, data, lastStart, lastStop-lastStart, fieldStart, i-fieldStart); consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, lineStop-fieldStart); } else { consumeField(fieldIdx++, typeExtractor, output, data, lastStart, lastStop-lastStart, fieldStart, lineStop-fieldStart); if (',' == data[i] && '\\'!=prevB && (quoteCount&1)==0) { consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, i-fieldStart); fieldStart = i+1; consumeField(fieldIdx++, typeExtractor, output, data, fieldStart, lineStop-fieldStart);