Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
package org.apache.avro.ipc;
Utility to present java.nio.ByteBuffer data as an java.io.InputStream
public class ByteBufferInputStream extends InputStream {
  private List<ByteBufferbuffers;
  private int current;
  public ByteBufferInputStream(List<ByteBufferbuffers) {
    this. = buffers;
  }

  

Throws:
java.io.EOFException if EOF is reached.
See also:
java.io.InputStream.read()
  public int read() throws IOException {
    return getBuffer().get() & 0xff;
  }

  

Throws:
java.io.EOFException if EOF is reached before reading all the bytes.
See also:
java.io.InputStream.read(byte[],int,int)
  public int read(byte[] bint offint lenthrows IOException {
    if (len == 0) return 0;
    ByteBuffer buffer = getBuffer();
    int remaining = buffer.remaining();
    if (len > remaining) {
      buffer.get(boffremaining);
      return remaining;
    } else {
      buffer.get(bofflen);
      return len;
    }
  }

  
Read a buffer from the input without copying, if possible.

Throws:
java.io.EOFException if EOF is reached before reading all the bytes.
  public ByteBuffer readBuffer(int lengththrows IOException {
    if (length == 0) return ByteBuffer.allocate(0);
    ByteBuffer buffer = getBuffer();
    if (buffer.remaining() == length) {           // can return current as-is?
      ++;
      return buffer;                              // return w/o copying
    }
    // punt: allocate a new buffer & copy into it
    ByteBuffer result = ByteBuffer.allocate(length);
    int start = 0;
    while (start < length)
      start += read(result.array(), startlength-start);
    return result;
  }

  
Returns the next non-empty buffer.

Throws:
java.io.EOFException if EOF is reached before reading all the bytes.
  private ByteBuffer getBuffer() throws IOException {
    while ( < .size()) {
      ByteBuffer buffer = .get();
      if (buffer.hasRemaining())
        return buffer;
      ++;
    }
    throw new EOFException();
  }
New to GrepCode? Check out our FAQ X