org.apache.sshd.common.util.buffer.Buffer.compact()方法的使用及代码示例

x33g5p2x  于2022-01-17 转载在 其他  
字(5.6k)|赞(0)|评价(0)|浏览(111)

本文整理了Java中org.apache.sshd.common.util.buffer.Buffer.compact()方法的一些代码示例,展示了Buffer.compact()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Buffer.compact()方法的具体详情如下:
包路径:org.apache.sshd.common.util.buffer.Buffer
类名称:Buffer
方法名:compact

Buffer.compact介绍

[英]"Shift" the internal data so that reading starts from position zero.
[中]“移位”内部数据,以便读数从零位开始。

代码示例

代码示例来源:origin: org.apache.sshd/sshd-core

buffer.compact();

代码示例来源:origin: org.apache.sshd/sshd-osgi

buffer.compact();

代码示例来源:origin: org.apache.sshd/sshd-osgi

@Override
  public synchronized int read(byte[] b, int off, int len) throws IOException {
    if (len == 1) {
      int c = read();
      if (c == -1) {
        return -1;
      }

      b[off] = (byte) c;
      return 1;
    }

    if (buffer.available() == 0) {
      buffer.compact();
      int nb = this.in.read(b, off, len);
      if (nb == -1) {
        return nb;
      }
      buffer.putRawBytes(b, off, nb);
    }

    int nb = 0;
    for (int curPos = off; (nb < len) && (buffer.available() > 0); nb++, curPos++) {
      b[curPos] = (byte) read();
    }

    return nb;
  }
}

代码示例来源:origin: org.apache.sshd/sshd-osgi

protected void messageReceived(Buffer buffer) throws Exception {
  Buffer message = null;
  synchronized (receiveBuffer) {
    receiveBuffer.putBuffer(buffer);
    if (receiveBuffer.available() >= 4) {
      int rpos = receiveBuffer.rpos();
      int len = receiveBuffer.getInt();
      // Protect against malicious or corrupted packets
      if (len < 0) {
        throw new StreamCorruptedException("Illogical message length: " + len);
      }
      receiveBuffer.rpos(rpos);
      if (receiveBuffer.available() >= (4 + len)) {
        message = new ByteArrayBuffer(receiveBuffer.getBytes());
        receiveBuffer.compact();
      }
    }
  }
  if (message != null) {
    synchronized (messages) {
      messages.offer(message);
      messages.notifyAll();
    }
  }
}

代码示例来源:origin: org.apache.sshd/sshd-core

protected void messageReceived(Buffer buffer) throws Exception {
  Buffer message = null;
  synchronized (receiveBuffer) {
    receiveBuffer.putBuffer(buffer);
    if (receiveBuffer.available() >= 4) {
      int rpos = receiveBuffer.rpos();
      int len = receiveBuffer.getInt();
      receiveBuffer.rpos(rpos);
      if (receiveBuffer.available() >= 4 + len) {
        message = new ByteArrayBuffer(receiveBuffer.getBytes());
        receiveBuffer.compact();
      }
    }
  }
  if (message != null) {
    synchronized (messages) {
      messages.offer(message);
      messages.notifyAll();
    }
  }
}

代码示例来源:origin: org.apache.sshd/sshd-osgi

if (future != null) {
  nbRead = future.buffer.putBuffer(buffer, false);
  buffer.compact();

代码示例来源:origin: org.apache.sshd/sshd-core

if (future != null) {
  nbRead = future.buffer.putBuffer(buffer, false);
  buffer.compact();

代码示例来源:origin: org.apache.sshd/sshd-core

@Override
  protected void doWriteData(byte[] data, int off, long len) throws IOException {
    ValidateUtils.checkTrue(len <= Integer.MAX_VALUE, "Data length exceeds int boundaries: %d", len);

    Buffer message = null;
    synchronized (receiveBuffer) {
      receiveBuffer.putBuffer(new ByteArrayBuffer(data, off, (int) len));
      if (receiveBuffer.available() >= 4) {
        off = receiveBuffer.rpos();
        len = receiveBuffer.getInt();
        receiveBuffer.rpos(off);
        if (receiveBuffer.available() >= (4 + len)) {
          message = new ByteArrayBuffer(receiveBuffer.getBytes());
          receiveBuffer.compact();
        }
      }
    }
    if (message != null) {
      synchronized (messages) {
        messages.offer(message);
        messages.notifyAll();
      }
    }
  }
}

代码示例来源:origin: org.apache.sshd/sshd-sftp

receiveBuffer.compact();
if ((receiveBuffer != incoming) && (incoming.available() > 0)) {
  receiveBuffer.putBuffer(incoming);

代码示例来源:origin: org.apache.sshd/sshd-osgi

@Override
  protected void doWriteData(byte[] data, int off, long len) throws IOException {
    ValidateUtils.checkTrue(len <= Integer.MAX_VALUE, "Data length exceeds int boundaries: %d", len);

    Buffer message = null;
    synchronized (receiveBuffer) {
      receiveBuffer.putBuffer(new ByteArrayBuffer(data, off, (int) len));
      if (receiveBuffer.available() >= 4) {
        off = receiveBuffer.rpos();
        len = receiveBuffer.getInt();
        receiveBuffer.rpos(off);
        if (receiveBuffer.available() >= (4 + len)) {
          message = new ByteArrayBuffer(receiveBuffer.getBytes());
          receiveBuffer.compact();
        }
      }
    }
    if (message != null) {
      synchronized (messages) {
        messages.offer(message);
        messages.notifyAll();
      }
    }
  }
}

代码示例来源:origin: org.apache.sshd/sshd-core

@Override
public IoReadFuture read(Buffer buf) {
  IoReadFutureImpl future = new IoReadFutureImpl(readFutureId, buf);
  if (isClosing()) {
    synchronized (buffer) {
      if (pending != null) {
        throw new ReadPendingException("Previous pending read not handled");
      }
      if (buffer.available() > 0) {
        Buffer fb = future.getBuffer();
        int nbRead = fb.putBuffer(buffer, false);
        buffer.compact();
        future.setValue(nbRead);
      } else {
        future.setValue(new IOException("Closed"));
      }
    }
  } else {
    synchronized (buffer) {
      if (pending != null) {
        throw new ReadPendingException("Previous pending read not handled");
      }
      pending = future;
    }
    doRead(false);
  }
  return future;
}

代码示例来源:origin: org.apache.sshd/sshd-sftp

@Override
public int data(ChannelSession channel, byte[] buf, int start, int len) throws IOException {
  buffer.compact();
  buffer.putRawBytes(buf, start, len);
  while (buffer.available() >= Integer.BYTES) {
    int rpos = buffer.rpos();
    int msglen = buffer.getInt();
    if (buffer.available() >= msglen) {
      Buffer b = new ByteArrayBuffer(msglen + Integer.BYTES + Long.SIZE /* a bit extra */, false);
      b.putInt(msglen);
      b.putRawBytes(buffer.array(), buffer.rpos(), msglen);
      requests.add(b);
      buffer.rpos(rpos + msglen + Integer.BYTES);
    } else {
      buffer.rpos(rpos);
      break;
    }
  }
  return 0;
}

代码示例来源:origin: org.apache.sshd/sshd-osgi

@Override
public IoReadFuture read(Buffer buf) {
  IoReadFutureImpl future = new IoReadFutureImpl(readFutureId, buf);
  if (isClosing()) {
    synchronized (buffer) {
      if (pending != null) {
        throw new ReadPendingException("Previous pending read not handled");
      }
      if (buffer.available() > 0) {
        Buffer fb = future.getBuffer();
        int nbRead = fb.putBuffer(buffer, false);
        buffer.compact();
        future.setValue(nbRead);
      } else {
        future.setValue(new IOException("Closed"));
      }
    }
  } else {
    synchronized (buffer) {
      if (pending != null) {
        throw new ReadPendingException("Previous pending read not handled");
      }
      pending = future;
    }
    doRead(false);
  }
  return future;
}

相关文章