lucene 4: optimize read/write BytesRef handling
This commit is contained in:
parent
c8cf72d657
commit
2b58c2dfff
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package org.elasticsearch.common.io.stream;
|
package org.elasticsearch.common.io.stream;
|
||||||
|
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.bytes.BytesArray;
|
import org.elasticsearch.common.bytes.BytesArray;
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
|
|
||||||
|
@ -69,6 +70,16 @@ public class BytesStreamInput extends StreamInput {
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BytesRef readBytesRef(int length) throws IOException {
|
||||||
|
if (unsafe) {
|
||||||
|
return super.readBytesRef(length);
|
||||||
|
}
|
||||||
|
BytesRef bytes = new BytesRef(buf, pos, length);
|
||||||
|
pos += length;
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long skip(long n) throws IOException {
|
public long skip(long n) throws IOException {
|
||||||
if (pos + n > count) {
|
if (pos + n > count) {
|
||||||
|
|
|
@ -87,10 +87,16 @@ public abstract class StreamInput extends InputStream {
|
||||||
|
|
||||||
public BytesRef readBytesRef() throws IOException {
|
public BytesRef readBytesRef() throws IOException {
|
||||||
int length = readVInt();
|
int length = readVInt();
|
||||||
int offset = readVInt();
|
return readBytesRef(length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BytesRef readBytesRef(int length) throws IOException {
|
||||||
|
if (length == 0) {
|
||||||
|
return new BytesRef();
|
||||||
|
}
|
||||||
byte[] bytes = new byte[length];
|
byte[] bytes = new byte[length];
|
||||||
readBytes(bytes, offset, length);
|
readBytes(bytes, 0, length);
|
||||||
return new BytesRef(bytes, offset, length);
|
return new BytesRef(bytes, 0, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readFully(byte[] b) throws IOException {
|
public void readFully(byte[] b) throws IOException {
|
||||||
|
|
|
@ -113,7 +113,6 @@ public abstract class StreamOutput extends OutputStream {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
writeVInt(bytes.length);
|
writeVInt(bytes.length);
|
||||||
writeVInt(bytes.offset);
|
|
||||||
write(bytes.bytes, bytes.offset, bytes.length);
|
write(bytes.bytes, bytes.offset, bytes.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package org.elasticsearch.transport.netty;
|
package org.elasticsearch.transport.netty;
|
||||||
|
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.bytes.ChannelBufferBytesReference;
|
import org.elasticsearch.common.bytes.ChannelBufferBytesReference;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
|
@ -57,6 +58,16 @@ public class ChannelBufferStreamInput extends StreamInput {
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BytesRef readBytesRef(int length) throws IOException {
|
||||||
|
if (!buffer.hasArray()) {
|
||||||
|
return super.readBytesRef(length);
|
||||||
|
}
|
||||||
|
BytesRef bytesRef = new BytesRef(buffer.array(), buffer.arrayOffset() + buffer.readerIndex(), length);
|
||||||
|
buffer.skipBytes(length);
|
||||||
|
return bytesRef;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int available() throws IOException {
|
public int available() throws IOException {
|
||||||
return endIndex - buffer.readerIndex();
|
return endIndex - buffer.readerIndex();
|
||||||
|
|
Loading…
Reference in New Issue