public byte[] getNext() throws IOException { // System.err.println("getNext() called"); if (LOG.isLoggable(Level.FINEST)) { LOG.finest("getNext() called"); } int c; while ((c = inputStream.read()) != -1) { if (!(pattern == 2 && c == 3)) { next.write(c); if (pattern == 0 && c == 0) { pattern = 1; } else if (pattern == 1 && c == 0) { pattern = 2; } else if (pattern == 2 && c == 0) { byte[] s = next.toByteArrayLess3(); next.reset(); if (s != null) { return s; } } else if (pattern == 2 && c == 1) { byte[] s = next.toByteArrayLess3(); next.reset(); pattern = 0; if (s != null) { return s; } } else if (pattern != 0) { pattern = 0; } } else { pattern = 0; } } byte[] s = next.toByteArray(); next.reset(); if (s.length > 0) { return s; } else { return null; } }
@VisibleForTesting void insertRecordIntoSorter(Product2<K, V> record) throws IOException { assert (sorter != null); final K key = record._1(); final int partitionId = partitioner.getPartition(key); serBuffer.reset(); serOutputStream.writeKey(key, OBJECT_CLASS_TAG); serOutputStream.writeValue(record._2(), OBJECT_CLASS_TAG); serOutputStream.flush(); final int serializedRecordSize = serBuffer.size(); assert (serializedRecordSize > 0); sorter.insertRecord( serBuffer.getBuf(), Platform.BYTE_ARRAY_OFFSET, serializedRecordSize, partitionId); }