/*
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package com.sun.webkit;
import java.io.
InputStream;
public final class
SimpleSharedBufferInputStream extends
InputStream {
private final
SharedBuffer sharedBuffer;
private long
position;
public
SimpleSharedBufferInputStream(
SharedBuffer sharedBuffer) {
if (
sharedBuffer == null) {
throw new
NullPointerException("sharedBuffer is null");
}
this.
sharedBuffer =
sharedBuffer;
}
@
Override
public int
read() {
byte[]
buffer = new byte[1];
int
length =
sharedBuffer.
getSomeData(
position,
buffer, 0, 1);
if (
length != 0) {
position++;
return
buffer[0] & 0xff;
} else {
return -1;
}
}
@
Override
public int
read(byte[]
b, int
off, int
len) {
if (
b == null) {
throw new
NullPointerException("b is null");
}
if (
off < 0) {
throw new
IndexOutOfBoundsException("off is negative");
}
if (
len < 0) {
throw new
IndexOutOfBoundsException("len is negative");
}
if (
len >
b.length -
off) {
throw new
IndexOutOfBoundsException(
"len is greater than b.length - off");
}
if (
len == 0) {
return 0;
}
int
length =
sharedBuffer.
getSomeData(
position,
b,
off,
len);
if (
length != 0) {
position +=
length;
return
length;
} else {
return -1;
}
}
@
Override
public long
skip(long
n) {
long
k =
sharedBuffer.
size() -
position;
if (
n <
k) {
k =
n < 0 ? 0 :
n;
}
position +=
k;
return
k;
}
@
Override
public int
available() {
return (int)
Math.
min(
sharedBuffer.
size() -
position,
Integer.
MAX_VALUE);
}
}