docs: private ListenableFuture<?> writeBlocksToTargets(Collection<DBBPool.BBContainer> outputBuffers,
                                                       int[] serialized)
      {
          Preconditions.checkArgument(m_tableTasks.size() == serialized.length);
          Preconditions.checkArgument(outputBuffers.size() == serialized.length);
  
          final List<ListenableFuture<?>> writeFutures =
              new ArrayList<ListenableFuture<?>>(outputBuffers.size());
  
          // The containers, the data targets, and the serialized byte counts should all line up
          Iterator<DBBPool.BBContainer> containerIter = outputBuffers.iterator();
          int serializedIndex = 0;
  
          for (SnapshotTableTask task : m_tableTasks) {
              final DBBPool.BBContainer container = containerIter.next();
  
              /*
               * Finalize the buffer by setting position to 0 and limit to the last used byte
               */
              final ByteBuffer buf = container.b();
              buf.limit(serialized[serializedIndex++] + task.m_target.getHeaderSize());
              buf.position(0);
  
              Callable<DBBPool.BBContainer> valueForTarget = Callables.returning(container);
              if (task.m_filters != null) {
                  for (SnapshotDataFilter filter : task.m_filters) {
                      valueForTarget = filter.filter(valueForTarget);
                  }
              }
  
              ListenableFuture<?> writeFuture = task.m_target.write(valueForTarget, m_tableId);
              if (writeFuture != null) {
                  writeFutures.add(writeFuture);
              }
          }
  
          // Wraps all write futures in one future
          return Futures.allAsList(writeFutures);
      }