scala缓冲源位置
关于Scala类scala缓冲源位置,scala,inputstream,filereader,fromfile,Scala,Inputstream,Filereader,Fromfile,关于Scala类BufferedSource,我有两个问题 如何查询当前的阅读位置 我用pos试过了: object testapp extends App { val doc = scala.io.Source.fromFile("text.txt") println(doc.pos) doc.next() println(doc.pos) doc.next() println(doc.pos) } 输出: 0 2049 2050 为什么从0跳到2049 是否有其他
BufferedSource
,我有两个问题
如何查询当前的阅读位置
我用pos
试过了:
object testapp extends App {
val doc = scala.io.Source.fromFile("text.txt")
println(doc.pos)
doc.next()
println(doc.pos)
doc.next()
println(doc.pos)
}
输出:
0
2049
2050
为什么从0跳到2049
是否有其他方法查询位置和/或将其设置到其他位置
感谢您的帮助:-)
pos
返回由next()
返回的最后一个字符的位置,但技巧是该位置是由position的编码器(scala.io.position
)编码的行和列的组合,作为单个整数
:
对象位置提供了对*行进行编码的方便方法
和一个整数中的列数。编码行*
(列)数字范围从0到行掩码
(列掩码
),*
其中0
表示行(列)未定义,*1
表示第一行(列)
$RelaxedPosition$
使用positoner
以获取更具可读性的信息:
当前输入和位置,以及下一个字符方法
委派给定位器
例如:
val doc = scala.io.Source.fromFile("aaa.txt")
val positioner = new doc.Positioner()
val positioned = doc.withPositioning(positioner)
positioned.next()
scala> positioner.cline -> positioner.ccol
res15: (Int, Int) = (1,2)
positioned.next()
scala> positioner.cline -> positioner.ccol
res17: (Int, Int) = (1,3)
p.S.Source
用于以字符流的形式读取数据,因此它为您提供了方便,如getLines()
等,因此基本上这就是定位器
使用行和列而不是绝对位置的原因
如果需要返回每个字符绝对位置的迭代器
,请使用zipWithIndex
:
scala> val doc = scala.io.Source.fromFile("aaa.txt").zipWithIndex
doc: Iterator[(Char, Int)] = non-empty iterator
scala> doc.next()
res38: (Char, Int) = (a,0)
scala> doc.next()
res39: (Char, Int) = (a,1)
scala> doc.next()
res40: (Char, Int) = (a,2)
scala> doc.next()
res41: (Char, Int) = (a,3)
scala> doc.next()
res42: (Char, Int) =
(
,4)