You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/04/27 20:24:25 UTC
svn commit: r769088 - in /incubator/cassandra/trunk:
src/org/apache/cassandra/gms/ src/org/apache/cassandra/io/
src/org/apache/cassandra/utils/ test/unit/org/apache/cassandra/io/
Author: jbellis
Date: Mon Apr 27 18:24:25 2009
New Revision: 769088
URL: http://svn.apache.org/viewvc?rev=769088&view=rev
Log:
r/m copied JDK code
patch by jbellis; reviewed by Eric Evans for CASSANDRA-37
Added:
incubator/cassandra/trunk/src/org/apache/cassandra/utils/BitSetSerializer.java
Removed:
incubator/cassandra/trunk/src/org/apache/cassandra/utils/BitSet.java
Modified:
incubator/cassandra/trunk/src/org/apache/cassandra/gms/PureRandom.java
incubator/cassandra/trunk/src/org/apache/cassandra/io/DataInputBuffer.java
incubator/cassandra/trunk/src/org/apache/cassandra/io/DataOutputBuffer.java
incubator/cassandra/trunk/src/org/apache/cassandra/utils/BloomFilter.java
incubator/cassandra/trunk/test/unit/org/apache/cassandra/io/DataInputBufferTest.java
Modified: incubator/cassandra/trunk/src/org/apache/cassandra/gms/PureRandom.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/gms/PureRandom.java?rev=769088&r1=769087&r2=769088&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/gms/PureRandom.java (original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/gms/PureRandom.java Mon Apr 27 18:24:25 2009
@@ -19,9 +19,7 @@
package org.apache.cassandra.gms;
import java.util.Random;
-
-import org.apache.cassandra.utils.BitSet;
-
+import java.util.BitSet;
/**
Modified: incubator/cassandra/trunk/src/org/apache/cassandra/io/DataInputBuffer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/io/DataInputBuffer.java?rev=769088&r1=769087&r2=769088&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/io/DataInputBuffer.java (original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/io/DataInputBuffer.java Mon Apr 27 18:24:25 2009
@@ -34,267 +34,7 @@
public final class DataInputBuffer extends DataInputStream
{
- /*
- * This is a clone of the ByteArrayInputStream class w/o any
- * method being synchronized.
- */
- public static class FastByteArrayInputStream extends InputStream
- {
- /**
- * An array of bytes that was provided by the creator of the stream.
- * Elements <code>buf[0]</code> through <code>buf[count-1]</code> are
- * the only bytes that can ever be read from the stream; element
- * <code>buf[pos]</code> is the next byte to be read.
- */
- protected byte buf[];
-
- /**
- * The index of the next character to read from the input stream buffer.
- * This value should always be nonnegative and not larger than the value of
- * <code>count</code>. The next byte to be read from the input stream
- * buffer will be <code>buf[pos]</code>.
- */
- protected int pos;
-
- /**
- * The currently marked position in the stream. ByteArrayInputStream objects
- * are marked at position zero by default when constructed. They may be
- * marked at another position within the buffer by the <code>mark()</code>
- * method. The current buffer position is set to this point by the
- * <code>reset()</code> method.
- * <p>
- * If no mark has been set, then the value of mark is the offset passed to
- * the constructor (or 0 if the offset was not supplied).
- *
- * @since JDK1.1
- */
- protected int mark = 0;
-
- /**
- * The index one greater than the last valid character in the input stream
- * buffer. This value should always be nonnegative and not larger than the
- * length of <code>buf</code>. It is one greater than the position of the
- * last byte within <code>buf</code> that can ever be read from the input
- * stream buffer.
- */
- protected int count;
-
- public FastByteArrayInputStream()
- {
- buf = new byte[0];
- }
-
- /**
- * Creates a <code>ByteArrayInputStream</code> so that it uses
- * <code>buf</code> as its buffer array. The buffer array is not copied.
- * The initial value of <code>pos</code> is <code>0</code> and the
- * initial value of <code>count</code> is the length of <code>buf</code>.
- *
- * @param buf
- * the input buffer.
- */
- public FastByteArrayInputStream(byte buf[])
- {
- this.buf = buf;
- this.pos = 0;
- this.count = buf.length;
- }
-
- /**
- * Creates <code>ByteArrayInputStream</code> that uses <code>buf</code>
- * as its buffer array. The initial value of <code>pos</code> is
- * <code>offset</code> and the initial value of <code>count</code> is
- * the minimum of <code>offset+length</code> and <code>buf.length</code>.
- * The buffer array is not copied. The buffer's mark is set to the specified
- * offset.
- *
- * @param buf
- * the input buffer.
- * @param offset
- * the offset in the buffer of the first byte to read.
- * @param length
- * the maximum number of bytes to read from the buffer.
- */
- public FastByteArrayInputStream(byte buf[], int offset, int length)
- {
- this.buf = buf;
- this.pos = offset;
- this.count = Math.min(offset + length, buf.length);
- this.mark = offset;
- }
-
- public final void setBytes(byte[] bytes)
- {
- buf = bytes;
- pos = 0;
- count = bytes.length;
- }
-
- /**
- * Reads the next byte of data from this input stream. The value byte is
- * returned as an <code>int</code> in the range <code>0</code> to
- * <code>255</code>. If no byte is available because the end of the
- * stream has been reached, the value <code>-1</code> is returned.
- * <p>
- * This <code>read</code> method cannot block.
- *
- * @return the next byte of data, or <code>-1</code> if the end of the
- * stream has been reached.
- */
- public final int read()
- {
- return (pos < count) ? ( buf[pos++] & 0xFF ) : -1;
- }
-
- /**
- * Reads up to <code>len</code> bytes of data into an array of bytes from
- * this input stream. If <code>pos</code> equals <code>count</code>,
- * then <code>-1</code> is returned to indicate end of file. Otherwise,
- * the number <code>k</code> of bytes read is equal to the smaller of
- * <code>len</code> and <code>count-pos</code>. If <code>k</code> is
- * positive, then bytes <code>buf[pos]</code> through
- * <code>buf[pos+k-1]</code> are copied into <code>b[off]</code> through
- * <code>b[off+k-1]</code> in the manner performed by
- * <code>System.arraycopy</code>. The value <code>k</code> is added
- * into <code>pos</code> and <code>k</code> is returned.
- * <p>
- * This <code>read</code> method cannot block.
- *
- * @param b
- * the buffer into which the data is read.
- * @param off
- * the start offset in the destination array <code>b</code>
- * @param len
- * the maximum number of bytes read.
- * @return the total number of bytes read into the buffer, or
- * <code>-1</code> if there is no more data because the end of the
- * stream has been reached.
- * @exception NullPointerException
- * If <code>b</code> is <code>null</code>.
- * @exception IndexOutOfBoundsException
- * If <code>off</code> is negative, <code>len</code> is
- * negative, or <code>len</code> is greater than
- * <code>b.length - off</code>
- */
- public final int read(byte b[], int off, int len)
- {
- if (b == null)
- {
- throw new NullPointerException();
- }
- else if (off < 0 || len < 0 || len > b.length - off)
- {
- throw new IndexOutOfBoundsException();
- }
- if (pos >= count)
- {
- return -1;
- }
- if (pos + len > count)
- {
- len = count - pos;
- }
- if (len <= 0)
- {
- return 0;
- }
- System.arraycopy(buf, pos, b, off, len);
- pos += len;
- return len;
- }
-
- /**
- * Skips <code>n</code> bytes of input from this input stream. Fewer bytes
- * might be skipped if the end of the input stream is reached. The actual
- * number <code>k</code> of bytes to be skipped is equal to the smaller of
- * <code>n</code> and <code>count-pos</code>. The value <code>k</code>
- * is added into <code>pos</code> and <code>k</code> is returned.
- *
- * @param n
- * the number of bytes to be skipped.
- * @return the actual number of bytes skipped.
- */
- public final long skip(long n)
- {
- if (pos + n > count)
- {
- n = count - pos;
- }
- if (n < 0)
- {
- return 0;
- }
- pos += n;
- return n;
- }
-
- /**
- * Returns the number of remaining bytes that can be read (or skipped over)
- * from this input stream.
- * <p>
- * The value returned is <code>count - pos</code>, which is the
- * number of bytes remaining to be read from the input buffer.
- *
- * @return the number of remaining bytes that can be read (or skipped over)
- * from this input stream without blocking.
- */
- public final int available()
- {
- return count - pos;
- }
-
- /**
- * Tests if this <code>InputStream</code> supports mark/reset. The
- * <code>markSupported</code> method of <code>ByteArrayInputStream</code>
- * always returns <code>true</code>.
- *
- * @since JDK1.1
- */
- public final boolean markSupported()
- {
- return true;
- }
-
- /**
- * Set the current marked position in the stream. ByteArrayInputStream
- * objects are marked at position zero by default when constructed. They may
- * be marked at another position within the buffer by this method.
- * <p>
- * If no mark has been set, then the value of the mark is the offset passed
- * to the constructor (or 0 if the offset was not supplied).
- *
- * <p>
- * Note: The <code>readAheadLimit</code> for this class has no meaning.
- *
- * @since JDK1.1
- */
- public final void mark(int readAheadLimit)
- {
- mark = pos;
- }
-
- /**
- * Resets the buffer to the marked position. The marked position is 0 unless
- * another position was marked or an offset was specified in the
- * constructor.
- */
- public final void reset()
- {
- pos = mark;
- }
-
- /**
- * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in
- * this class can be called after the stream has been closed without
- * generating an <tt>IOException</tt>.
- * <p>
- */
- public final void close() throws IOException
- {
- }
- }
-
- private static class Buffer extends FastByteArrayInputStream
+ private static class Buffer extends ByteArrayInputStream
{
public Buffer()
{
@@ -351,18 +91,6 @@
buffer_.reset(input, start, length);
}
- /** Returns the current position in the input. */
- public int getPosition()
- {
- return buffer_.getPosition();
- }
-
- /** Set the position within the input */
- public void setPosition(int position)
- {
- buffer_.setPosition(position);
- }
-
/** Returns the length of the input. */
public int getLength()
{
Modified: incubator/cassandra/trunk/src/org/apache/cassandra/io/DataOutputBuffer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/io/DataOutputBuffer.java?rev=769088&r1=769087&r2=769088&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/io/DataOutputBuffer.java (original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/io/DataOutputBuffer.java Mon Apr 27 18:24:25 2009
@@ -35,246 +35,7 @@
*/
public class DataOutputBuffer extends DataOutputStream
{
- /*
- * This is a clone of the ByteArrayOutputStream but w/o the unnecessary
- * synchronized keyword usage.
- */
- public static class FastByteArrayOutputStream extends OutputStream
- {
-
- /**
- * The buffer where data is stored.
- */
- protected byte buf[];
-
- /**
- * The number of valid bytes in the buffer.
- */
- protected int count;
-
- /**
- * Creates a new byte array output stream. The buffer capacity is
- * initially 32 bytes, though its size increases if necessary.
- */
- public FastByteArrayOutputStream()
- {
- this(32);
- }
-
- /**
- * Creates a new byte array output stream, with a buffer capacity of the
- * specified size, in bytes.
- *
- * @param size
- * the initial size.
- * @exception IllegalArgumentException
- * if size is negative.
- */
- public FastByteArrayOutputStream(int size)
- {
- if (size < 0)
- {
- throw new IllegalArgumentException("Negative initial size: "
- + size);
- }
- buf = new byte[size];
- }
-
- /**
- * Writes the specified byte to this byte array output stream.
- *
- * @param b
- * the byte to be written.
- */
- public void write(int b)
- {
- int newcount = count + 1;
- if (newcount > buf.length)
- {
- buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
- }
- buf[count] = (byte) b;
- count = newcount;
- }
-
- /**
- * Writes <code>len</code> bytes from the specified byte array
- * starting at offset <code>off</code> to this byte array output
- * stream.
- *
- * @param b
- * the data.
- * @param off
- * the start offset in the data.
- * @param len
- * the number of bytes to write.
- */
- public void write(byte b[], int off, int len)
- {
- if ((off < 0) || (off > b.length) || (len < 0)
- || ((off + len) > b.length) || ((off + len) < 0))
- {
- throw new IndexOutOfBoundsException();
- }
- else if (len == 0)
- {
- return;
- }
- int newcount = count + len;
- if (newcount > buf.length)
- {
- buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
- }
- System.arraycopy(b, off, buf, count, len);
- count = newcount;
- }
-
- /**
- * Writes the complete contents of this byte array output stream to the
- * specified output stream argument, as if by calling the output
- * stream's write method using <code>out.write(buf, 0, count)</code>.
- *
- * @param out
- * the output stream to which to write the data.
- * @exception IOException
- * if an I/O error occurs.
- */
- public void writeTo(OutputStream out) throws IOException
- {
- out.write(buf, 0, count);
- }
-
- /**
- * Resets the <code>count</code> field of this byte array output
- * stream to zero, so that all currently accumulated output in the
- * output stream is discarded. The output stream can be used again,
- * reusing the already allocated buffer space.
- *
- * @see java.io.ByteArrayInputStream#count
- */
- public void reset()
- {
- count = 0;
- }
-
- /**
- * Creates a newly allocated byte array. Its size is the current size of
- * this output stream and the valid contents of the buffer have been
- * copied into it.
- *
- * @return the current contents of this output stream, as a byte array.
- * @see java.io.ByteArrayOutputStream#size()
- */
- public byte toByteArray()[]
- {
- return Arrays.copyOf(buf, count);
- }
-
- /**
- * Returns the current size of the buffer.
- *
- * @return the value of the <code>count</code> field, which is the
- * number of valid bytes in this output stream.
- * @see java.io.ByteArrayOutputStream#count
- */
- public int size()
- {
- return count;
- }
-
- /**
- * Converts the buffer's contents into a string decoding bytes using the
- * platform's default character set. The length of the new
- * <tt>String</tt> is a function of the character set, and hence may
- * not be equal to the size of the buffer.
- *
- * <p>
- * This method always replaces malformed-input and unmappable-character
- * sequences with the default replacement string for the platform's
- * default character set. The
- * {@linkplain java.nio.charset.CharsetDecoder} class should be used
- * when more control over the decoding process is required.
- *
- * @return String decoded from the buffer's contents.
- * @since JDK1.1
- */
- public String toString()
- {
- return new String(buf, 0, count);
- }
-
- /**
- * Converts the buffer's contents into a string by decoding the bytes
- * using the specified {@link java.nio.charset.Charset charsetName}.
- * The length of the new <tt>String</tt> is a function of the charset,
- * and hence may not be equal to the length of the byte array.
- *
- * <p>
- * This method always replaces malformed-input and unmappable-character
- * sequences with this charset's default replacement string. The {@link
- * java.nio.charset.CharsetDecoder} class should be used when more
- * control over the decoding process is required.
- *
- * @param charsetName
- * the name of a supported
- * {@linkplain java.nio.charset.Charset </code>charset<code>}
- * @return String decoded from the buffer's contents.
- * @exception UnsupportedEncodingException
- * If the named charset is not supported
- * @since JDK1.1
- */
- public String toString(String charsetName) throws UnsupportedEncodingException
- {
- return new String(buf, 0, count, charsetName);
- }
-
- /**
- * Creates a newly allocated string. Its size is the current size of the
- * output stream and the valid contents of the buffer have been copied
- * into it. Each character <i>c</i> in the resulting string is
- * constructed from the corresponding element <i>b</i> in the byte
- * array such that: <blockquote>
- *
- * <pre>
- * c == (char) (((hibyte & 0xff) << 8) | (b & 0xff))
- * </pre>
- *
- * </blockquote>
- *
- * @deprecated This method does not properly convert bytes into
- * characters. As of JDK 1.1, the preferred way to do
- * this is via the <code>toString(String enc)</code>
- * method, which takes an encoding-name argument, or the
- * <code>toString()</code> method, which uses the
- * platform's default character encoding.
- *
- * @param hibyte
- * the high byte of each resulting Unicode character.
- * @return the current contents of the output stream, as a string.
- * @see java.io.ByteArrayOutputStream#size()
- * @see java.io.ByteArrayOutputStream#toString(String)
- * @see java.io.ByteArrayOutputStream#toString()
- */
- @Deprecated
- public String toString(int hibyte)
- {
- return new String(buf, hibyte, 0, count);
- }
-
- /**
- * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods
- * in this class can be called after the stream has been closed without
- * generating an <tt>IOException</tt>.
- * <p>
- *
- */
- public void close() throws IOException
- {
- }
-
- }
-
- private static class Buffer extends FastByteArrayOutputStream
+ private static class Buffer extends ByteArrayOutputStream
{
public byte[] getData()
{
@@ -300,24 +61,9 @@
System.arraycopy(buf, 0, newbuf, 0, count);
buf = newbuf;
}
- long start = System.currentTimeMillis();
in.readFully(buf, count, len);
count = newcount;
}
-
- public void write(ByteBuffer buffer, int len) throws IOException
- {
- int newcount = count + len;
- if (newcount > buf.length)
- {
- byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)];
- System.arraycopy(buf, 0, newbuf, 0, count);
- buf = newbuf;
- }
- long start = System.currentTimeMillis();
- buffer.get(buf, count, len);
- count = newcount;
- }
}
private Buffer buffer;
@@ -362,10 +108,4 @@
{
buffer.write(in, length);
}
-
- /** Writes bytes from a ByteBuffer directly into the buffer. */
- public void write(ByteBuffer in, int length) throws IOException
- {
- buffer.write(in, length);
- }
}
Added: incubator/cassandra/trunk/src/org/apache/cassandra/utils/BitSetSerializer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/utils/BitSetSerializer.java?rev=769088&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/utils/BitSetSerializer.java (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/utils/BitSetSerializer.java Mon Apr 27 18:24:25 2009
@@ -0,0 +1,33 @@
+package org.apache.cassandra.utils;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.DataInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
+import java.util.BitSet;
+
+import org.apache.cassandra.io.ICompactSerializer;
+
+class BitSetSerializer
+{
+ public static void serialize(BitSet bs, DataOutputStream dos) throws IOException
+ {
+ ObjectOutputStream oos = new ObjectOutputStream(dos);
+ oos.writeObject(bs);
+ oos.flush();
+ }
+
+ public static BitSet deserialize(DataInputStream dis) throws IOException
+ {
+ ObjectInputStream ois = new ObjectInputStream(dis);
+ try
+ {
+ return (BitSet) ois.readObject();
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
Modified: incubator/cassandra/trunk/src/org/apache/cassandra/utils/BloomFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/utils/BloomFilter.java?rev=769088&r1=769087&r2=769088&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/utils/BloomFilter.java (original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/utils/BloomFilter.java Mon Apr 27 18:24:25 2009
@@ -21,6 +21,7 @@
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
+import java.util.BitSet;
import org.apache.cassandra.io.ICompactSerializer;
@@ -127,13 +128,13 @@
throws IOException
{
dos.writeInt(bf.getHashCount());
- BitSet.serializer().serialize(bf.filter(), dos);
+ BitSetSerializer.serialize(bf.filter(), dos);
}
public BloomFilter deserialize(DataInputStream dis) throws IOException
{
int hashes = dis.readInt();
- BitSet bs = BitSet.serializer().deserialize(dis);
+ BitSet bs = BitSetSerializer.deserialize(dis);
return new BloomFilter(hashes, bs);
}
}
Modified: incubator/cassandra/trunk/test/unit/org/apache/cassandra/io/DataInputBufferTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/unit/org/apache/cassandra/io/DataInputBufferTest.java?rev=769088&r1=769087&r2=769088&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/unit/org/apache/cassandra/io/DataInputBufferTest.java (original)
+++ incubator/cassandra/trunk/test/unit/org/apache/cassandra/io/DataInputBufferTest.java Mon Apr 27 18:24:25 2009
@@ -7,25 +7,6 @@
public class DataInputBufferTest {
@Test
- public void testRandom() throws IOException {
- Random random = new Random();
- byte[] bytes = new byte[1024*1024];
- random.nextBytes(bytes);
-
- DataInputBuffer.FastByteArrayInputStream bis = new DataInputBuffer.FastByteArrayInputStream(bytes);
- int read = 0;
- int n = 0;
- while ( true )
- {
- read = bis.read();
- if ( read == -1 )
- break;
- assert read == ((int)bytes[n++]&0xFF);
- }
- assert n == bytes.length;
- }
-
- @Test
public void testSmall() throws IOException {
DataOutputBuffer bufOut = new DataOutputBuffer();
bufOut.writeUTF("Avinash");