Ответ на ваш первый вопрос - да и нет. Если буфер уже содержит терминатор строки, он немедленно вернется, однако, если он не содержит терминатора, он попытается заполнить буфер, но не обязательно полностью. Он будет читать только до тех пор, пока не будут получены новые данные (хотя бы один символ) или достигнут EOF.
Одной из приятных особенностей java является то, что библиотеки имеют открытый исходный код, поэтому, если у вас есть полная копия JDK, вы можете сами обратиться к источнику, чтобы ответить на вопросы такого типа. Я использую eclipse в качестве своей IDE, и по умолчанию, если вы поместите курсор на имя класса и нажмете F3, он приведет вас к источнику (так я получил ответ выше). Предостережение касается стандартного распространения, источник для некоторых внутренних классов / нативный код недоступен.
Что касается вашего второго вопроса, я бы сказал, вообще говоря, нет, так как логика, используемая BufferedReader, обычно та же самая, что любой код должен был бы воссоздать для достижения той же задачи. Единственное, что может замедлить BufferedReader, это то, что он использует синхронизированный StringBuffer вместо несинхронизированного StringBuilder.