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

📄 counter64.java

📁 snmp4j
💻 JAVA
字号:
/*_############################################################################  _##  _##  SNMP4J - Counter64.java  _##  _##  Copyright 2003-2005  Frank Fock and Jochen Katz (SNMP4J.org)  _##  _##  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.snmp4j.smi;import java.io.*;import java.math.BigInteger;import org.snmp4j.asn1.BER;import org.snmp4j.asn1.BERInputStream;/** * The <code>Counter64</code> class represents a 64bit unsigned integer type. * It is used for monotonically increasing values that wrap around at * 2^64-1 (18446744073709551615). * <p> * The unsigned 64bit value is represented by a signed 64bit long value * internally. * * @author Frank Fock * @version 1.0 */public class Counter64 extends Variable {  static final long serialVersionUID = 8741539680564150071L;  private long value = 0;  public Counter64() {  }  public Counter64(long value) {    setValue(value);  }  public void encodeBER(OutputStream outputStream) throws java.io.IOException {    BER.encodeUnsignedInt64(outputStream, BER.COUNTER64, value);  }  public void decodeBER(BERInputStream inputStream) throws java.io.IOException {    BER.MutableByte type = new BER.MutableByte();    long newValue = BER.decodeUnsignedInt64(inputStream, type);    if (type.getValue() != BER.COUNTER64) {      throw new IOException("Wrong type encountered when decoding Counter64: "+                            type.getValue());    }    setValue(newValue);  }  public int getSyntax() {    return SMIConstants.SYNTAX_COUNTER64;  }  public int hashCode() {    return (int)value;  }  public int getBERLength() {    if (value < 0L) {      return 11;    }    if (value < 0x80000000L) {      if (value < 0x8000L) {          return (value < 0x80L) ? 3 : 4;      }      return (value < 0x800000L) ? 5 : 6;    }    if (value < 0x800000000000L) {      return (value < 0x8000000000L) ? 7 : 8;    }    return (value < 0x80000000000000L) ? 9 : 10;  }  public boolean equals(Object o) {    if (o instanceof Counter64) {      return ((Counter64)o).value == value;    }    return false;  }  public int compareTo(Object o) {    long other = ((Counter64)o).value;    for (int i=63; i>=0; i--) {      if (((value >> i) & 1) !=          ((other >> i) & 1)) {        if (((value >> i) & 1) != 0) {          return 1;        }        else {          return -1;        }      }    }    return 0;  }  public String toString() {    if ((value > 0) && (value < Long.MAX_VALUE)) {      return Long.toString(value);    }    byte[] bytes = new byte[8];    for (int i=0; i<8; i++) {      bytes[i] = (byte)((value >> ((7-i)*8)) & 0xFF);    }    BigInteger i64 = new BigInteger(1, bytes);    return i64.toString();  }  public void setValue(long value) {    this.value = value;  }  public long getValue() {    return value;  }  public Object clone() {    return new Counter64(value);  }  /**   * Increment the value of the counter by one. If the current value is   * 2^63-1 (9223372036854775807) then value will be set to -2^63. Nevertheless,   * the BER encoded value of this counter will always be unsigned!   */  public void increment() {    value++;  }}

⌨️ 快捷键说明

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