У меня есть случай, когда мне нужно заглянуть вперед в поток для существования определенного регулярного выражения, а затем прочитать данные из потока.mark и readAheadLimit
знак и сброс позволяет мне сделать это, но я столкнулся с вопросом, где знак становится недействительным, если readAheadLimit выходит за пределы размера текущего буфера.
Например: у меня есть BufferedReader с размером буфера 1k.
Позволяет сказать, что я нахожусь в положении 1000 (знак = 1000) в буфере, и мне нужно, чтобы проверить регулярное выражение в следующих 100 символов (readAheadLimit = 100).
Таким образом, при чтении момент Я пересекаю текущий размер буфера (1024), выделяется новый буфер и знак становится недействительным (не может быть сброшен), и данные передаются в новый буфер обычным способом.
Я думаю, что это намеченное поведение, но есть ли способ обойти это?
Цените свою помощь.
С уважением
1.Может не удовлетворять всем нашим случаям, поскольку мы передаем большой объем данных, и эти проверки могут быть часто необходимы. 2. Звучит интересно. Буду признателен, если вы сможете уточнить. Предполагаете ли вы, что мы читаем в буфер, а затем изменяем его размер на основе коэффициента загрузки, копируя предыдущее содержимое в новый буфер? –
Отредактированный второй вариант в ответе. Коэффициент загрузки может вызывать OOM, если ваши данные действительно большие, поэтому вам все равно потребуется некоторое ограничение, чтобы сделать это в памяти. – Raman
Возможно ли получить текущую позицию в буфере - где установлена метка? Я хотел бы использовать это, чтобы определить, будет ли знак + readAheadLimit перетекать в следующий буфер. –