#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?