Неожиданное поведение Java при печати через поток

#java #caching

Вопрос:

Я использую Java для некоторых CP, и сегодня я увидел поведение, которое не могу объяснить.

У меня есть некоторый класс решателя, возвращающий список моему основному методу. Основной метод выглядит примерно так:

 public static void main(String[] args) throws IOException {
       FastScanner in = new FastScanner(new BufferedReader(new FileReader("resources/Cp/.../sample.txt")));
//        FastScanner in = new FastScanner(new BufferedReader(new FileReader("resources/Cp/.../debug.txt")));
//           FastScanner in = new FastScanner(new BufferedReader(new InputStreamReader(System.in)));
       var writer = new PrintWriter(System.out);
       long numberOfTestcases = Integer.valueOf(in.readLine());

       for (int j = 1; j <= numberOfTestcases; j  ) {
           final var sol = solve(in, j);

           String s = sol.toString();

           writer.println("Case #"   j   ": "   (sol
                   .stream()
                   .map(Vector2d::getX)
                   .mapToInt(Double::intValue)
                   .distinct()
                   .sorted()
                   .mapToObj(Objects::toString)
                   .collect(Collectors.joining(" "))
           ));
           in.readLine();
       }
       writer.close();
   }
 

Я заметил, что (ленивый) писатель дает мне неправильные результаты для решения проблемы, если и только если я не прочитал переменную заранее. Добавление этой строки s строки перед записью изменит результат, с которого была напечатана запись

 Case #4: 10
Case #5: 5
Case #6: 3 4
 

Для

 Case #4: 10
Case #5: 9
Case #6: 3 4
 

Итак, мой вопрос: я бы ожидал, что операции чтения никоим образом не изменят состояние.

Есть ли что-нибудь относительно согласованности кэша, что может вызвать другое поведение? Может быть, что-то, что связано с потоковым API?