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 + -
显示快捷键?