diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index f7ea4e1614f..54f55f69a75 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -99,6 +99,10 @@ API Changes
not be overriden by subclasses: per-stream initialization should happen
in reset(). (Robert Muir)
+* LUCENE-4377: Remove IndexInput.copyBytes(IndexOutput, long).
+ Use DataOutput.copyBytes(DataInput, long) instead.
+ (Mike McCandless, Robert Muir)
+
Bug Fixes
* LUCENE-4297: BooleanScorer2 would multiply the coord() factor
diff --git a/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java b/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java
index e972f2975bc..a59fb67ead8 100644
--- a/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java
+++ b/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java
@@ -338,18 +338,6 @@ public abstract class BufferedIndexInput extends IndexInput {
return toCopy;
}
- @Override
- public void copyBytes(IndexOutput out, long numBytes) throws IOException {
- assert numBytes >= 0: "numBytes=" + numBytes;
-
- while (numBytes > 0) {
- if (bufferLength == bufferPosition) {
- refill();
- }
- numBytes -= flushBuffer(out, numBytes);
- }
- }
-
/**
* Returns default buffer sizes for the given {@link IOContext}
*/
diff --git a/lucene/core/src/java/org/apache/lucene/store/Directory.java b/lucene/core/src/java/org/apache/lucene/store/Directory.java
index a08e83941c4..8313ef2cc7c 100644
--- a/lucene/core/src/java/org/apache/lucene/store/Directory.java
+++ b/lucene/core/src/java/org/apache/lucene/store/Directory.java
@@ -197,7 +197,7 @@ public abstract class Directory implements Closeable {
try {
os = to.createOutput(dest, context);
is = openInput(src, context);
- is.copyBytes(os, is.length());
+ os.copyBytes(is, is.length());
} catch (IOException ioe) {
priorException = ioe;
} finally {
@@ -314,22 +314,5 @@ public abstract class Directory implements Closeable {
public long length() {
return length;
}
-
- @Override
- public void copyBytes(IndexOutput out, long numBytes) throws IOException {
- // Copy first whatever is in the buffer
- numBytes -= flushBuffer(out, numBytes);
-
- // If there are more bytes left to copy, delegate the copy task to the
- // base IndexInput, in case it can do an optimized copy.
- if (numBytes > 0) {
- long start = getFilePointer();
- if (start + numBytes > length) {
- throw new EOFException("read past EOF: " + this);
- }
- base.seek(fileOffset + start);
- base.copyBytes(out, numBytes);
- }
- }
}
}
diff --git a/lucene/core/src/java/org/apache/lucene/store/IndexInput.java b/lucene/core/src/java/org/apache/lucene/store/IndexInput.java
index 60bb2f349a9..c864ceb0f71 100644
--- a/lucene/core/src/java/org/apache/lucene/store/IndexInput.java
+++ b/lucene/core/src/java/org/apache/lucene/store/IndexInput.java
@@ -66,30 +66,6 @@ public abstract class IndexInput extends DataInput implements Cloneable,Closeabl
/** The number of bytes in the file. */
public abstract long length();
- /**
- * Copies numBytes
bytes to the given {@link IndexOutput}.
- *
- * NOTE: this method uses an intermediate buffer to copy the bytes. - * Consider overriding it in your implementation, if you can make a better, - * optimized copy. - *
- * NOTE ensure that there are enough bytes in the input to copy to - * output. Otherwise, different exceptions may be thrown, depending on the - * implementation. - */ - public void copyBytes(IndexOutput out, long numBytes) throws IOException { - assert numBytes >= 0: "numBytes=" + numBytes; - - byte copyBuf[] = new byte[BufferedIndexInput.BUFFER_SIZE]; - - while (numBytes > 0) { - final int toCopy = (int) (numBytes > copyBuf.length ? copyBuf.length : numBytes); - readBytes(copyBuf, 0, toCopy); - out.writeBytes(copyBuf, 0, toCopy); - numBytes -= toCopy; - } - } - @Override public String toString() { return resourceDescription; diff --git a/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java b/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java index 48d63e428fb..86bc27ef9a0 100644 --- a/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java +++ b/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java @@ -300,7 +300,7 @@ public class NRTCachingDirectory extends Directory { IndexInput in = null; try { in = cache.openInput(fileName, context); - in.copyBytes(out, in.length()); + out.copyBytes(in, in.length()); } finally { IOUtils.close(in, out); } diff --git a/lucene/core/src/java/org/apache/lucene/store/RAMInputStream.java b/lucene/core/src/java/org/apache/lucene/store/RAMInputStream.java index fa2fd5f713a..ba7cc4e3dd0 100644 --- a/lucene/core/src/java/org/apache/lucene/store/RAMInputStream.java +++ b/lucene/core/src/java/org/apache/lucene/store/RAMInputStream.java @@ -105,27 +105,6 @@ public class RAMInputStream extends IndexInput implements Cloneable { } } - @Override - public void copyBytes(IndexOutput out, long numBytes) throws IOException { - assert numBytes >= 0: "numBytes=" + numBytes; - - long left = numBytes; - while (left > 0) { - if (bufferPosition == bufferLength) { - ++currentBufferIndex; - switchCurrentBuffer(true); - } - - final int bytesInBuffer = bufferLength - bufferPosition; - final int toCopy = (int) (bytesInBuffer < left ? bytesInBuffer : left); - out.writeBytes(currentBuffer, bufferPosition, toCopy); - bufferPosition += toCopy; - left -= toCopy; - } - - assert left == 0: "Insufficient bytes to copy: numBytes=" + numBytes + " copied=" + (numBytes - left); - } - @Override public long getFilePointer() { return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; diff --git a/lucene/core/src/java/org/apache/lucene/store/RAMOutputStream.java b/lucene/core/src/java/org/apache/lucene/store/RAMOutputStream.java index c7eceaed843..1dc7014b513 100644 --- a/lucene/core/src/java/org/apache/lucene/store/RAMOutputStream.java +++ b/lucene/core/src/java/org/apache/lucene/store/RAMOutputStream.java @@ -178,27 +178,5 @@ public class RAMOutputStream extends IndexOutput { /** Returns byte usage of all buffers. */ public long sizeInBytes() { return (long) file.numBuffers() * (long) BUFFER_SIZE; - } - - @Override - public void copyBytes(DataInput input, long numBytes) throws IOException { - assert numBytes >= 0: "numBytes=" + numBytes; - - while (numBytes > 0) { - if (bufferPosition == bufferLength) { - currentBufferIndex++; - switchCurrentBuffer(); - } - - int toCopy = currentBuffer.length - bufferPosition; - if (numBytes < toCopy) { - toCopy = (int) numBytes; - } - input.readBytes(currentBuffer, bufferPosition, toCopy, false); - numBytes -= toCopy; - bufferPosition += toCopy; - } - - } - + } } diff --git a/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java b/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java index f5e01e3ed92..2600a0b172e 100644 --- a/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java +++ b/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java @@ -208,12 +208,5 @@ public class SimpleFSDirectory extends FSDirectory { boolean isFDValid() throws IOException { return file.getFD().valid(); } - - @Override - public void copyBytes(IndexOutput out, long numBytes) throws IOException { - numBytes -= flushBuffer(out, numBytes); - // If out is FSIndexOutput, the copy will be optimized - out.copyBytes(this, numBytes); - } } } diff --git a/lucene/core/src/test/org/apache/lucene/store/TestCopyBytes.java b/lucene/core/src/test/org/apache/lucene/store/TestCopyBytes.java index d8e870f54a3..69eaa6a1264 100644 --- a/lucene/core/src/test/org/apache/lucene/store/TestCopyBytes.java +++ b/lucene/core/src/test/org/apache/lucene/store/TestCopyBytes.java @@ -121,7 +121,7 @@ public class TestCopyBytes extends LuceneTestCase { IndexInput input = d.openInput("data", IOContext.DEFAULT); IndexOutput outputHeader = d.createOutput("header", IOContext.DEFAULT); // copy our 100-byte header - input.copyBytes(outputHeader, 100); + outputHeader.copyBytes(input, 100); outputHeader.close(); // now make N copies of the remaining bytes @@ -163,7 +163,7 @@ public class TestCopyBytes extends LuceneTestCase { @Override public void run() { try { - src.copyBytes(dst, src.length()-100); + dst.copyBytes(src, src.length()-100); dst.close(); } catch (IOException ex) { throw new RuntimeException(ex); diff --git a/lucene/test-framework/src/java/org/apache/lucene/store/MockIndexInputWrapper.java b/lucene/test-framework/src/java/org/apache/lucene/store/MockIndexInputWrapper.java index 09f91222c3c..a0bbedcd3ce 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/store/MockIndexInputWrapper.java +++ b/lucene/test-framework/src/java/org/apache/lucene/store/MockIndexInputWrapper.java @@ -118,12 +118,6 @@ public class MockIndexInputWrapper extends IndexInput { delegate.readBytes(b, offset, len); } - @Override - public void copyBytes(IndexOutput out, long numBytes) throws IOException { - ensureOpen(); - delegate.copyBytes(out, numBytes); - } - @Override public void readBytes(byte[] b, int offset, int len, boolean useBuffer) throws IOException {