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 是否有其他

关于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

是否有其他方法查询位置和/或将其设置到其他位置


感谢您的帮助:-)

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)