Skip to content

Commit 2b58c2d

Browse files
committed
lucene 4: optimize read/write BytesRef handling
1 parent c8cf72d commit 2b58c2d

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

src/main/java/org/elasticsearch/common/io/stream/BytesStreamInput.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.elasticsearch.common.io.stream;
2121

22+
import org.apache.lucene.util.BytesRef;
2223
import org.elasticsearch.common.bytes.BytesArray;
2324
import org.elasticsearch.common.bytes.BytesReference;
2425

@@ -69,6 +70,16 @@ public BytesReference readBytesReference(int length) throws IOException {
6970
return bytes;
7071
}
7172

73+
@Override
74+
public BytesRef readBytesRef(int length) throws IOException {
75+
if (unsafe) {
76+
return super.readBytesRef(length);
77+
}
78+
BytesRef bytes = new BytesRef(buf, pos, length);
79+
pos += length;
80+
return bytes;
81+
}
82+
7283
@Override
7384
public long skip(long n) throws IOException {
7485
if (pos + n > count) {

src/main/java/org/elasticsearch/common/io/stream/StreamInput.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,16 @@ public BytesReference readBytesReference(int length) throws IOException {
8787

8888
public BytesRef readBytesRef() throws IOException {
8989
int length = readVInt();
90-
int offset = readVInt();
90+
return readBytesRef(length);
91+
}
92+
93+
public BytesRef readBytesRef(int length) throws IOException {
94+
if (length == 0) {
95+
return new BytesRef();
96+
}
9197
byte[] bytes = new byte[length];
92-
readBytes(bytes, offset, length);
93-
return new BytesRef(bytes, offset, length);
98+
readBytes(bytes, 0, length);
99+
return new BytesRef(bytes, 0, length);
94100
}
95101

96102
public void readFully(byte[] b) throws IOException {

src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public void writeBytesRef(BytesRef bytes) throws IOException {
113113
return;
114114
}
115115
writeVInt(bytes.length);
116-
writeVInt(bytes.offset);
117116
write(bytes.bytes, bytes.offset, bytes.length);
118117
}
119118

src/main/java/org/elasticsearch/transport/netty/ChannelBufferStreamInput.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.elasticsearch.transport.netty;
2121

22+
import org.apache.lucene.util.BytesRef;
2223
import org.elasticsearch.common.bytes.BytesReference;
2324
import org.elasticsearch.common.bytes.ChannelBufferBytesReference;
2425
import org.elasticsearch.common.io.stream.StreamInput;
@@ -57,6 +58,16 @@ public BytesReference readBytesReference(int length) throws IOException {
5758
return ref;
5859
}
5960

61+
@Override
62+
public BytesRef readBytesRef(int length) throws IOException {
63+
if (!buffer.hasArray()) {
64+
return super.readBytesRef(length);
65+
}
66+
BytesRef bytesRef = new BytesRef(buffer.array(), buffer.arrayOffset() + buffer.readerIndex(), length);
67+
buffer.skipBytes(length);
68+
return bytesRef;
69+
}
70+
6071
@Override
6172
public int available() throws IOException {
6273
return endIndex - buffer.readerIndex();

0 commit comments

Comments
 (0)