scala.io.BufferedSourceクラスのバグの検証コード

Scalaのライブラリにバグ? - 玲瓏庵
の検証コード。

    val buf = new StringBuilder;
    for(i <- 1 to 2000) {
      buf.append("あ");
    }
    for(i <- 1 to 2000) {
      buf.append("a");
    }
    buf.append("E");
    
    val s = Source.fromInputStream(new ByteArrayInputStream(buf.toString.getBytes("UTF-8")),"UTF-8");
    while(s.hasNext) {
      print(s.next);
    }

正常に動作しているならば最後に'E'って表示されるはず。
だけど'a'表示中に途切れる。
よくよく見ると昨日の説明は不足していて、詳しくはマルチバイト文字が来るとCharBufferの方はflipするとlimitが小さくなるのだが、ByteBufferの方はlimitが変わらないせいでその次にシングルバイト文字ばっかりくるとByteBufferにのこっちゃう。だけど、byteChannel.readに-1が来るとそこでByteBufferの残りを捨ててしまうって事だ。

つたない英語でscala-langに登録してみた。