/**
   * Writes the tail portion of the file to the {@link OutputStream}.
   *
   * @param start The byte offset in the input file where the write operation starts.
   * @return if the file is still being written, this method writes the file until the last newline
   *     character and returns the offset to start the next write operation.
   */
  public long writeLogTo(long start, OutputStream out) throws IOException {
    CountingOutputStream os = new CountingOutputStream(out);

    Session f = source.open();
    f.skip(start);

    if (completed) {
      // write everything till EOF
      byte[] buf = new byte[1024];
      int sz;
      while ((sz = f.read(buf)) >= 0) os.write(buf, 0, sz);
    } else {
      ByteBuf buf = new ByteBuf(null, f);
      HeadMark head = new HeadMark(buf);
      TailMark tail = new TailMark(buf);
      buf = null;

      int readLines = 0;
      while (tail.moveToNextLine(f) && readLines++ < MAX_LINES_READ) {
        head.moveTo(tail, os);
      }
      head.finish(os);
    }

    f.close();
    os.flush();

    return os.getCount() + start;
  }
Ejemplo n.º 2
0
  /** {@inheritDoc} */
  @Override
  protected int output(final OutputStream stream) throws IOException {
    final CountingOutputStream cout = new CountingOutputStream(stream);
    final Writer writer = PDFDocument.getWriterFor(cout);
    if (hasObjectNumber()) {
      writer.write(getObjectID());
    }

    writer.write(toString());

    if (hasObjectNumber()) {
      writer.write("\nendobj\n");
    }

    writer.flush();
    return cout.getCount();
  }
  /**
   * Writes the section of the file {@link OutputStream}.
   *
   * @param start The byte offset in the input file where the write operation starts.
   * @return if the file is still being written, this method writes the file until the last newline
   *     character and returns the offset to start the next write operation.
   */
  public long writeLogTo(long start, int size, OutputStream out) throws IOException {
    if (size <= 0) {
      return 0;
    }

    CountingOutputStream os = new CountingOutputStream(out);

    Session f = source.open();
    f.skip(start);

    long end = start + size;

    byte[] buf = new byte[size];
    int sz;
    if ((sz = f.read(buf)) >= 0) {
      os.write(buf, 0, sz);
    }
    /*
            if(completed) {
            } else {
                ByteBuf buf = new ByteBuf(null,f, size);
                HeadMark head = new HeadMark(buf);
                TailMark tail = new TailMark(buf);

                int readLines = 0;
                while(tail.moveToNextLine(f) && readLines++ < MAX_LINES_READ) {
                    head.moveTo(tail, os);
                    if (buf.isFull() || os.getCount() >= end) {
                        break;
                    }
                }
                head.finish(os);
            }
    */

    f.close();
    os.flush();

    return os.getCount() + start;
  }