⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 byteswritable.java

📁 hadoop:Nutch集群平台
💻 JAVA
字号:
/** * Copyright 2005 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.hadoop.io;import java.io.IOException;import java.io.DataInput;import java.io.DataOutput;/**  * A byte sequence that is usable as a key or value. * It is resizable and distinguishes between the size of the seqeunce and * the current capacity. The hash function is the front of the md5 of the  * buffer. The sort order is the same as memcmp. * @author Doug Cutting */public class BytesWritable implements WritableComparable {  private int size;  private byte[] bytes;    /**   * Create a zero-size sequence.   */  public BytesWritable() {    size = 0;    bytes = new byte[100];  }    /**   * Create a BytesWritable using the byte array as the initial value.   * @param bytes This array becomes the backing storage for the object.   */  public BytesWritable(byte[] bytes) {    this.bytes = bytes;    this.size = bytes.length;  }    /**   * Get the data from the BytesWritable.   * @return The data is only valid between 0 and getSize() - 1.   */  public byte[] get() {    return bytes;  }    /**   * Get the current size of the buffer.   * @return   */  public int getSize() {    return size;  }    /**   * Change the size of the buffer. The values in the old range are preserved   * and any new values are undefined. The capacity is changed if it is    * necessary.   * @param size The new number of bytes   */  public void setSize(int size) {    if (size > getCapacity()) {      setCapacity(size * 3 / 2);    }    this.size = size;  }    /**   * Get the capacity, which is the maximum size that could handled without   * resizing the backing storage.   * @return The number of bytes   */  public int getCapacity() {    return bytes.length;  }    /**   * Change the capacity of the backing storage.   * The data is preserved.   * @param new_cap The new capacity in bytes.   */  public void setCapacity(int new_cap) {    if (new_cap != getCapacity()) {      byte[] new_data = new byte[new_cap];      if (new_cap < size) {        size = new_cap;      }      if (size != 0) {        System.arraycopy(bytes, 0, new_data, 0, size);      }      bytes = new_data;    }  }    // inherit javadoc  public void readFields(DataInput in) throws IOException {    setSize(0); // clear the old data    setSize(in.readInt());    in.readFully(bytes, 0, size);  }    // inherit javadoc  public void write(DataOutput out) throws IOException {    out.writeInt(size);    out.write(bytes, 0, size);  }    public int hashCode() {    return WritableComparator.hashBytes(bytes, size);  }    /**   * Define the sort order of the BytesWritable.   * @param right_obj The other bytes writable   * @return Positive if left is bigger than right, 0 if they are equal, and   *         negative if left is smaller than right.   */  public int compareTo(Object right_obj) {    BytesWritable right = ((BytesWritable) right_obj);    return WritableComparator.compareBytes(bytes, 0, size,                                            right.bytes, 0, right.size);  }    /**   * Are the two byte sequences equal?   */  public boolean equals(Object right_obj) {    if (right_obj instanceof BytesWritable) {      return compareTo(right_obj) == 0;    }    return false;  }    /** A Comparator optimized for BytesWritable. */   public static class Comparator extends WritableComparator {    public Comparator() {      super(BytesWritable.class);    }        /**     * Compare the buffers in serialized form.     */    public int compare(byte[] b1, int s1, int l1,        byte[] b2, int s2, int l2) {      int size1 = readInt(b1, s1);      int size2 = readInt(b2, s2);      return compareBytes(b1,s1+4, size1, b2, s2+4, size2);    }  }    static {                                        // register this comparator    WritableComparator.define(BytesWritable.class, new Comparator());  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -