abstractfilereader.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 94 行

SCALA
94
字号
/* NSC -- new Scala compiler * Copyright 2005-2007 LAMP/EPFL * @author  Martin Odersky */// $Id: AbstractFileReader.scala 11875 2007-05-31 18:43:38Z michelou $package scala.tools.nsc.symtab.classfileimport java.lang.Float.intBitsToFloatimport java.lang.Double.longBitsToDoubleimport scala.tools.nsc.io.AbstractFile/**  * This class reads files byte per byte. Only used by ClassFileParser * * @author Philippe Altherr * @version 1.0, 23/03/2004 */class AbstractFileReader(val file: AbstractFile) {  /** the buffer containing the file   */  val buf: Array[Byte] = file.toByteArray  /** the current input pointer   */  var bp: Int = 0  /** return byte at offset 'pos'   */  @throws(classOf[IndexOutOfBoundsException])  def byteAt(pos: Int): Byte = buf(pos)  /** read a byte   */  @throws(classOf[IndexOutOfBoundsException])  def nextByte: Byte = {    val b = buf(bp)    bp = bp + 1    b  }  /** read some bytes   */  def nextBytes(len: Int): Array[Byte] = {    bp = bp + len    buf.subArray(bp - len, bp)  }  /** read a character   */  def nextChar: Char = {    (((nextByte & 0xff) << 8) + (nextByte & 0xff)).toChar  }  /** read an integer   */  def nextInt: Int =    ((nextByte & 0xff) << 24) + ((nextByte & 0xff) << 16) +    ((nextByte & 0xff) <<  8) +  (nextByte & 0xff)  /** extract a character at position bp from buf   */  def getChar(mybp: Int): Char =    (((buf(mybp) & 0xff) << 8) + (buf(mybp+1) & 0xff)).toChar  /** extract an integer at position bp from buf   */  def getInt(mybp: Int): Int =    ((buf(mybp  ) & 0xff) << 24) + ((buf(mybp+1) & 0xff) << 16) +    ((buf(mybp+2) & 0xff) << 8) + (buf(mybp+3) & 0xff)  /** extract a long integer at position bp from buf   */  def getLong(mybp: Int): Long =    (getInt(mybp).toLong << 32) + (getInt(mybp + 4) & 0xffffffffL)  /** extract a float at position bp from buf   */  def getFloat(mybp: Int): Float = intBitsToFloat(getInt(mybp))  /** extract a double at position bp from buf   */  def getDouble(mybp: Int): Double = longBitsToDouble(getLong(mybp))  /** skip next 'n' bytes   */  def skip(n: Int) { bp += n }}

⌨️ 快捷键说明

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